Dim test() As List(Of String)

Résolu
jothecracker Messages postés 26 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 9 mars 2011 - 8 févr. 2008 à 23:30
jothecracker Messages postés 26 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 9 mars 2011 - 10 févr. 2008 à 15:12
       Bonjour,

Dans le cadre d'un ajout sur une base de donnees, j'aurais besoin d'utiliser ce type de variable

Dim ColonValeur() As List(Of String)

ColonValeur(0).Add("Titredelacolon1")
ColonValeur(1).Add("ValeurAajouter1")
ColonValeur(0).Add("Titredelacolon2")

ColonValeur(1).Add("ValeurAajouter2")

ColonValeur(0).Add("Titredelacolon3")

ColonValeur(1).Add("ValeurAajouter3")

A la creation de la variable Dim ColonValeur() As List(Of String) VB ne pose pas de probleme, ca me laisse supposer qu'il est possible de l'utiliser, mais au premier ajout il me met une erreur : Object reference not set to an instance of an object

il me propose de la declarer de cette facon : Dim ColonValeur() As New List(Of String) mais comme il sagit d'un tableau le New ne peut pas etre utiliser, la boucle sans fin..., je seche, si quelqu'un a une idee ou une autre solution pour faire le meme type d'action...

Merci d'avance
A voir également:

4 réponses

jothecracker Messages postés 26 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 9 mars 2011 1
10 févr. 2008 à 15:12
Merci Casy, ta solution est parfaite, c'est exactement ce que je rechercher, mais je ne connaissais pas encore les Structures, je n'avais jamais utiliser cela avant, merci encore pour ton devouement et bonne continuation, mon programme pour la gestion des heures suplementaires avance grace a toi !!
1
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 févr. 2008 à 09:36
Il ne s'agit pas d'un tableau mais d'une liste.

Ta ligne "Dim" ne fait que déclarer une variable de type liste, en aucun cas la liste est créée. Si par la suite tu veux utiliser cette liste (ce qui semble logique) il faut tout d'abord la créer en utilisant New.
Alors effectivement le mieux étant de la créer au moment de la déclaration comme tu le propose le deboggeur.

Ensuite tu ne peux pas utiliser d'index pour pointer tes éléments dans la liste tant que tu n'as pas ajouter l'élément en question.

Tu ne peux pas faire ColonValeur(0).Add("Titredelacolon1"), il faut d'abord que tu fasse ColonValeur.Add("Titredelacolon1"), ensuite tu accèdera à cet élément par ColonValeur(0)

C'est une liste que tu crée, en gros un tableau à une seule dimension. Tous les éléments que tu ajoutera seront ajouter les uns à la suite des autres.

ColonValeur.Add("Titredelacolon1")    ' élément d'index 0
ColonValeur.Add("ValeurAajouter1")    ' élément d'index 1
ColonValeur.Add("Titredelacolon2")    ' élément d'index 2
ColonValeur.Add("ValeurAajouter2")    ' élément d'index 3
ColonValeur.Add("Titredelacolon3")    ' élément d'index 4
ColonValeur.Add("ValeurAajouter3")    ' élément d'index 5

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
jothecracker Messages postés 26 Date d'inscription jeudi 26 décembre 2002 Statut Membre Dernière intervention 9 mars 2011 1
9 févr. 2008 à 21:52
Merci Casy pour ta reponse

Mais avec les explications que tu me donne mon probleme reste entier, alors je vais detailler un peu plus le probleme,

enfait dans les grandes ligne il me faudrai un tableau a 2 dimentions sur lequel il serait possible de faire un count pour savoir le nom de valeur d'une dimention, la 2eme etant symetrique,

dans la base de donnee, il y aurait une table dans laquel je voudrais ajouter une ligne, cette ligne a plusieur colonnes sous lesquelles j'ajoute plusieurs valeur:

x |    1        |     2
1 | Nom     | Brutus
2 | Prenom | Alphonse
3 | Age      | 23

Sub Ajout(ByVal Table As String, ByVal ColonValeur() As List(Of String))

        'Declare la nouvelle ligne
        Dim Row As DataRow

        'Creation de la nouvelle Ligne dans la Table ...
        Row = BaseVirtuel.Tables(Table).NewRow()

        'Remplit la ligne par Colones
        Dim a As Integer
        For a = 0 To ColonValeur.Count - 1
            Row(ColonValeur(0).Item(a).ToString) = ColonValeur(1).Item(a).ToString
        Next

Donc ma variable ColonValeur serait un tableau a 2 dimentions, dans la 1ereColonValeur(1) serait contenue les valeurs des colonnes de la table, et dans la 2emeColonValeur(1) les valeurs des champs a ajouter.

et par le biais de la boucle For To je voudrai que cette variable soit "sous forme de liste" enfin qu'il soit possible d'en tirer un count pour faire la boucle, et pouvoir lire les 2 colonnes du tableau ligne par ligne, je ne sais pas je suis tres clair, et si cela est possible, c'est pour cela que cette methode "As List(Of String)" me disais bien

Si tu as une idee je suis preneur !
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 févr. 2008 à 22:39
Tu peux effectivement utiliser un tableau à 2 dimensions. Il te suffit de faire appel à la methode GetLenght pour connaitre la longueur de la dimension souhaite. Ca remplace le Count.

Bien que le tableau sera certainement meilleurs en terme de performances, voici un petit exemple, encore avec les listes, pour faire une liste à 2 dimensions (ou plus)
Juste pour montrer qu'en .Net, il existe plusieur façon pour arriver au même résultat :

' Dans les déclaration de variable publiques
Private Structure ligne
        Dim nom As String
        Dim valeur As String
       
        ' Constructeur
        Public Sub New(ByVal nom As String, ByVal valeur As String)
                Me.nom =  nom
                Me.valeur = valeur
        End Sub
End Structure

' Dans une
procédure ou fonction qui initialise la liste
    ........
        Dim ColonValeur As New List(Of ligne)

        ColonValeur.Add(New ligne("Titredelacolon1", "ValeurAajouter1"))  ' élément d'index 0
        ColonValeur.Add(New ligne("Titredelacolon2", "ValeurAajouter2"))  ' élément d'index 1
        ColonValeur.Add(New ligne("Titredelacolon3", "ValeurAajouter3"))  ' élément d'index 2
    ........

' Ta fonction
d'ajout
Private Sub Ajout(ByVal Table As String, ByVal ColonValeur As List(Of ligne))

        'Declare la
nouvelle ligne
        Dim Row As DataRow

        'Creation de la
nouvelle Ligne dans la Table ...
        Row = BaseVirtuel.Tables(Table).NewRow()

        'Remplit la ligne par Colones
        For a As Integer = 0 To ColonValeur.Count - 1
                Row(ColonValeur(a).nom) =
ColonValeur(a).valeur
        Next
End Sub

Il y a de quoi s'éclater avec .Net

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #   
-1
Rejoignez-nous