IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Se balader dans une structure [Débutant]


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut Se balader dans une structure
    Bonjour,

    Je voudrais savoir s'il existe un moyen de parcourir les items d'une structure par le biais d'une boucle, du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Structure mastruct
            Dim item0 as String
            Dim item2 as Boolean
            ...
            Dim item36 as Integer
    End Structure
     
     
    Dim maliste As mastruct
    ... code pour remplir maliste
     
    ' je voudrais faire qqch comme : 
    For i =0 to 36
    Datarow(i) = mastruct.item(i)
    Next
    En clair, dans mon exemple, il s'agit de remplir une ligne de datatable (et donc, in fine, la ligne d'une table de BdD) avec les items de ma structure
    Sans avoir à écrire 37 lignes de code.

    Je suppose que la réponse est : non, ce n'est pas possible.
    Mais dans ce cas, quelle serait la meilleure méthode ?

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    euhhh ..... OUI c'est possible et ça se fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Imports System.Reflection
     
    Structure mastruct
            Dim item0 as String
            Dim item2 as Boolean
            '...
            Dim item36 as Integer
    End Structure
     
     
    Dim sType As Type = GetType(mastruct)
    For Each fType As FieldInfo In sType.GetFields()
            Msgbox(fType.Name)
    Next
    A+

  3. #3
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Attention, si les champs ne sont pas public, il faut ajouter des flags

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    iFeldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  4. #4
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Super !!
    Je n'aurais pas trouvé tout seul.
    Il faudra que j'approfondisse ces instructions que je ne connaissais pas.

    Merci de votre aide.

  5. #5
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Oups, je me suis trompé dans l'énoncé de mon pb. Le bon code était celui-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Structure mastruct
            Dim item0 as String
            Dim item2 as Boolean
            ...
            Dim item36 as Integer
    End Structure
     
     
    Dim maliste As mastruct
    ... code pour remplir maliste
     
    ' je voudrais faire qqch comme : 
    For i =0 to 36
    Datarow(i) = maliste.item(i)
    Next
    En gros ce n'est pas dans la structure que je veux me "balader" mais dans une variable de type structure.

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Ou :

    Je n ai pas mon EDI sous les yeux donc utilises intellisense pour voir les propriétés ou méthodes qu'on te propose


    A+

  7. #7
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    Bonjour

    Pas trop compris

    quel rapport entre la datatable et maliste ?
    est ce que maliste correspond à une rangée du datatable ?


    ... code pour remplir maliste
    pourquoi ne pas écrire dans ce code pour remplir ta datatable

  8. #8
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Ou :

    Je n ai pas mon EDI sous les yeux donc utilises intellisense pour voir les propriétés ou méthodes qu'on te propose


    A+
    Ben justement, si je tape "maliste.", l'iDE me propose :
    - tous les membres de la structure (item1, item2 ... item36)
    - Equals
    - GetHashCode
    - GetType, ReferenceEquals

    Je n'ai pas trouvé comment balayer tous les items dans une boucle.

    L'idéal serait un truc comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim i As Integer = 0 
    For Each fType as FieldInfo In sType.GetFields()
             datarow(i) = Eval("maliste." & fType.Name)
             i+=1
    Next
    La dernière instruction n'existe pas ; c'est du pseudo-code pour dire que je colle "maliste." à fType.Name pour former successivement :
    - maliste.item1
    - maliste.item2
    -...
    - maliste .item36

    C'est la traduction en VB.NET de ce pseudo-code que je ne trouve pas.

  9. #9
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    quel rapport entre la datatable et maliste ?
    est ce que maliste correspond à une rangée du datatable ?
    Les champs de la datatable sont effectivement typés comme ma structure :
    - même nombre de colonnes (37)
    - mêmes types (integer, string, boolean etc...)

    Le passage par l'intermédiaire de la structure c'est que je peux définir dans le code une instance par défaut de cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MydefaultList As mastruct
    MyDefaultList.MyDefaultListInit()
    'Sub MyDefaultListInit() est une procédure Friend, membre de la structure dans laquelle je donne des valeurs par défaut à mes 37 items.

  10. #10
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    tenté mais pas réussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private table As New DataTable
        Structure mastruct
            Dim item0 As String
            Dim item1 As Boolean
            Dim item2 As String
            Dim item3 As Boolean
            Dim item4 As String
     
        End Structure
        Dim malist As mastruct
     Private Sub filldatatable()
     
            Dim col As Integer
            Dim sType As Type = GetType(mastruct)
            table.Rows.Add()
            col = 0
            For Each fType As FieldInfo In sType.GetFields()
                table.Columns.Add()
                table.Rows(table.Rows.Count - 1).Item(col) = ?????
            Next
        End Sub
    d'un coté tu ne veux écrire 37 lignes de code. mais la sub MyDefaultListInit
    contient bien 37 lignes
    tu peux écrire ainsi



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub MyDefaultListInit()
            table.Rows.Add()
            malist.item0 = "aaa"
            table.Columns.Add()
            table.Rows(table.Rows.Count - 1).Item(table.Columns.Count - 1) = malist.item0
            malist.item1 = False
            table.Columns.Add()
            table.Rows(table.Rows.Count - 1).Item(table.Columns.Count - 1) = malist.item1
            malist.item2 = "bbb"
            table.Columns.Add()
            table.Rows(table.Rows.Count - 1).Item(table.Columns.Count - 1) = malist.item2
            malist.item3 = True
            table.Columns.Add()
            table.Rows(table.Rows.Count - 1).Item(table.Columns.Count - 1) = malist.item3
            malist.item4 = "ccc"
            table.Columns.Add()
            table.Rows(table.Rows.Count - 1).Item(table.Columns.Count - 1) = malist.item4
     
        End Sub

  11. #11
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Mars 2012
    Messages
    691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Israël

    Informations forums :
    Inscription : Mars 2012
    Messages : 691
    Points : 929
    Points
    929
    Par défaut
    peut etre ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private table As New DataTable
       Private Sub filldatatable()
            table.Clear()
            Dim col As Integer
            Dim sType As Type = GetType(mastruct)
            table.Rows.Add()
            col = 0
            For Each fType As FieldInfo In sType.GetFields()
                table.Columns.Add()
                table.Rows(table.Rows.Count - 1).Item(col) = fType.GetValue(malist)
            Next
        End Sub

  12. #12
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Points : 275
    Points
    275
    Par défaut
    @shayw

    Merci c'est exactement la bonne syntaxe.

    J'ai pourtant tourné autour toute l'après-midi sans la trouver.

    Je vais me coucher moins bête ce soir

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie d'un buffer dans une structure
    Par KnightsOfTheRound dans le forum C++
    Réponses: 6
    Dernier message: 29/12/2005, 15h00
  2. Réponses: 7
    Dernier message: 21/12/2005, 16h44
  3. Enlver un noeud dans une structure XML
    Par Sharingan dans le forum ASP
    Réponses: 4
    Dernier message: 20/12/2004, 08h08
  4. donée de plusieur vecteur dans une structure ??
    Par lipczynski dans le forum C++
    Réponses: 5
    Dernier message: 13/08/2004, 08h17
  5. type void* dans une structure
    Par barbapapaz dans le forum C
    Réponses: 3
    Dernier message: 16/07/2004, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo