Collection générique

Soyez le premier à donner votre avis sur cette source.

Vue 12 089 fois - Téléchargée 683 fois

Description

VB NET Collection Générique avec Clef, index et triable sur n'importe quelle propriété
J'ai couplé deux exemples trouvés sur le net pour arriver à mes fins, dont un était en C#,
une collection avec une clef non triée automatiquement , un index et qui puisse être triée
sur n'importe quelle propriété.
Merci de votre indulgence, je débute en VBNET depuis 1 mois
Il y a du nettoyage à faire j'ai tout laissé en vrac, désolé.
Toute critique constructive sera la bienvenue...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
3
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007

j'ai oublié, NON le tri n'est pas auto justement, dans les collection clef, valeur, le trie est tjs effectué sur la clef, ici le tri est sur le ou les champs qu'on a défini à l'aide de SortExpression et on utilise la méthode sort pour trier à moins d'avoir laissé la propriété Autosort = True, il faut désactiver cette propriété quand on charge la collection sinon le tri se fait à chaque insertion et ça rame, ensuite on la reactive apres le chargement pour des insertions une à une.

ex de sortexpression

SortExpression = "Nom ASC, Prenom ASC"
SortExpression = "Nom ASC, Prenom DESC"

SortExpression = "Nom ASC"
SortExpression = "Nom ASC, Prenom DESC, DateDeNaissance ASC"
Messages postés
3
Date d'inscription
vendredi 13 janvier 2006
Statut
Membre
Dernière intervention
13 avril 2007

bonjour,
désolé pour les commentaires, pas le temps, pourtant je preche pour ça, mais là je suis
en phase de découverte de VB.NET

Pour mes devs. en vb6 j'utilisais la méthode qui consiste à créer des collections d'objets calqués sur la db, en fait un 3-tiers réduis à 2-tiers. (couche métier et acces donnée regroupees)
ex: si j'ai une table Users -> j'ai une classe cUsers(la collection) et une classe cUser
cUsers hérite de la collection "Inherits IGenericObject(Of Integer, cUser, cUsers)"
cUsers contient les méthodes Load (depuis la base) add, remove, item, etc...
cUser contient les propriétés tel que Prenom,nom, etc...
cUser contient Update

dans add,remove et update on
je mettrais un petit projet en ligne des que j'aurais un instant. désolé je fais pas le gars overbooké, mais là j'ai vraiment pas le temps

ex du ADD dans la collection

'OVERLOADS PAR CE QUE ADD EST DANS LA COLLECTION
Public Overloads Sub Add(ByRef User As cUser)

Try

Dim i As Integer

Dim SQL_Cnx As New SQLServer
SQL_Cnx.Connect("sa", "DAMO", "POR-ALEX\PORDAMO", "DAMO_PARAMS")

Dim SqlCmd As SqlCommand = New SqlCommand("INSERT INTO Users" & _
"(TypeUser, Civilite,Prenom,Nom,Login,Password)" & _
"Values(" & User.TypeUser & ", " & _
User.Civilite & ", " & _
User.Prenom & ", " & _
User.Nom & ", " & _
User.Login & ", " & _
User.Password & ")
'C'EST ICI QU ON SE SERT DE LA COLLECTION GENERIQUE
MyBase.Add(i, User)

Catch ex As Exception
MsgBox(ex.InnerException.Message)
End Try

End Sub

dans l'interface on peut ecrire

Private Sub LoadDataGrid()
Dim oUsers As cUsers
Dim oUser as cUser


Users.AutoSort=False
Users.load 'dans le load il y a la requete qui charge la collection
'ici on trie sur deux champs
Users.SortExpression = "Nom ASC, Prenom ASC"
Users.Sort()

For Each oUser In DADParams.Users
With oUser
dagUsers.Rows.Add(oUser.Key, _
oUser.Login, _
oUser.Prenom, _
oUser.Nom, _
oUser.DateNaissance, _
oUser.NumSS)
End With
Next

End Sub

voila si ça peut aider, désolé je ferais de mon mieux pour fournir un projet
clair, ceux qui ont le temps d'étudier la question me diront ce qu'ils en pensent.
Je dev. sur VB.NET depuis une mois et les limitations que j'avais avec VB6 se sont envolées.
Messages postés
4
Date d'inscription
jeudi 21 avril 2005
Statut
Membre
Dernière intervention
12 avril 2007

Bonjour,
en fait c'est une "Sorted list" que tu as créé.

SortedList: c'est une Classe .Net

Il permet l'accès aux valeurs par l'intermédiaire des clés associées ou des index.

C'est un hybride de HashTable et de Array.

On ajoute un élément par mySL.Add(Clé,Valeur)

La séquence d'index est basée sur la séquence de tri. Quand un élément est ajouté, il est inséré dans l'ordre de tri adéquat, et l'indexation s'ajuste en conséquence. Le tri est donc automatique.

On peut donc lire une valeur par sa Clé ou son Index:

Quand la clé d'un élément permet d'accéder à celui-ci à l'aide de la propriété d'indexeur Item, l'élément se comporte comme Hashtable.
mySL.Item(CLE) 'retourne la valeur correspondant à la clé CLE

Quand l'index d'un élément permet d'accéder à celui-ci à l'aide de GetByIndex ou de SetByIndex, l'élément se comporte comme Array (tableau avec un Index).
mySL.GetKey(3) 'retourne la Clé qui est dans l'élément d'index 3

mySL.GetByIndex(3) 'retourne la valeur qui est dans l'élément d'index 3


SortedList maintient en interne deux tableaux , un tableau pour les clés et un autre pour les valeurs associées.


A ton service
Messages postés
3
Date d'inscription
vendredi 25 novembre 2005
Statut
Membre
Dernière intervention
12 avril 2007

Bonjour,
d'après ce que je crois comprendre, c'est le source de ta bibliotheque, mais peux t'on avoir une petite appli de démonstration qui nous montrerait les possibilités de ta bibliotheque (ajout, suppression, accès avec les clef, etc.)

J'aurais 2 petites remarques après avoir lu le code :

- 1. Y'a des lignes de code mise en commentaire, il aurait été préférable de les supprimer (là je chipote)
- 2. Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code, Commente ton code,
Tu fais un nouvelle classe ? Commente ton code pour dire à quoi elle sert.
Tu fais une nouvelle fonction un peu touffue ? Commente ton code pour dire ce qu'elle va faire.
Tu viens de finir un bout de code sortie de ton imagination délirante (si si, avoue) ? Commente ton code pour expliquer ce que ça fait et comment ça le fait.

C'est hyper important de commenter, d'une part pour nous qui lisons le code d'un autre, et d'autre pour toi. Car dans 6 mois quand tu auras besoin de remettre le nez dedans pour faire une modif' ou une amélioration...ben tu seras dans les pixels jusqu'au cou et tu perdras un temps fou à recomprendre ton propre travail.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.