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 :

Problème avec l'ajout d'informations dans un List(of List of(de type structuré))


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut Problème avec l'ajout d'informations dans un List(of List of(de type structuré))
    Bonjour à tous!

    Et merci d'avance à ceux qui pourront m'aider!

    Comme l'indique mon intitulé, je travaille actuellement sur une liste de liste de type structuré.

    Voici mon code (parfois mieux vaut l'exemple qu'un long discours) :

    - Tout d'abord, la structure servant à la liste de listes comportant ce type structuré EN ENTRÉE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'structure permettant la récupération des éléments d'impression de la table étiquette
        Public Structure LabelPrintingElement
            Public etiq_num As String
            Public etiq_dateheure As Date
        End Structure
    -Voici la structure servant à la liste de liste de type structurée EN SORTIE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'structure permettant la récupération des éléments loftware
        Public Structure ElementsEtiquetteLWL
            Public LibelleElementLWL As String
            Public ValeurElementLWL As String
        End Structure
    Pourquoi ce changement de type en cours de route? Tout simplement car j'ai créé une classe permettant d'utiliser n'importe quel type d'informations avec ce formalisme afin de produire des étiquettes industrielles.

    Voici le code en question (C'est une fonction "rustine" qui fait le lien entre 2 classes ayant leur propre méthode, et c'est pour moi la manière la plus propre de m'en sortir et également celle qui me prendrait normalement le moins de temps... puisque je dois finaliser le tout pour vendredi ) :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
        Function conversion_ListofLabels_en_ListeElemParEtiq(ByVal ListofLabels As List(Of data_access.LabelPrintingElement)) _
                    As List(Of List(Of loftware_access.ElementsEtiquetteLWL))
            'Déclaration des variables
            Dim ListeElemsParEtiq As New List(Of List(Of loftware_access.ElementsEtiquetteLWL))
            Dim ListeUnElemParEtiq As New List(Of loftware_access.ElementsEtiquetteLWL)
            Dim ElementsEtiquetteLWL As loftware_access.ElementsEtiquetteLWL
    
            'Exécution
            For i As Integer = 0 To ListofLabels.Count - 1
                ElementsEtiquetteLWL.LibelleElementLWL = "etiq_num"
                ElementsEtiquetteLWL.ValeurElementLWL = ListofLabels.Item(i).etiq_num
                'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
                ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)
    
                ElementsEtiquetteLWL.LibelleElementLWL = "etiq_dateheure"
                ElementsEtiquetteLWL.ValeurElementLWL = Format(ListofLabels.Item(i).etiq_dateheure, "dd/MM/yyyy")
                'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
                ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)
                '----------------------------------------------------------
                'on ajoute le tout dans la liste de liste ListeElemsParEtiq
                '----------------------------------------------------------
                ListeElemsParEtiq.Add(ListeUnElemParEtiq)
                'on nettoie les valeurs précédemment passées dans ListeUnElemParEtiq.Clear
                ' afin que cela ne produise pas un comportement anormal dans ListeElemsParEtiq
                ListeUnElemParEtiq.Clear()
    
            Next
            ' ListeElemParEtiq.Add(ListeUnElemParEtiq)
            Return ListeElemsParEtiq
        End Function
    Le ListeUnElemParEtiq.Clear() est "obligatoire" car sinon je vais "concaténer" (désolé pour l'abus de langage) les même éléments à chaque fois que je vais boucler (je suis censé avoir forcément 2 branches et X troncs).

    SAUF QUE lorsque j'efface ListeUnElemParEtiq avec ListeUnElemParEtiq.Clear(), cela impacte également l'ensemble des élements déja présents dans ListeElemsParEtiq qui est une liste composée de ListeUnElemParEtiq.

    J'avais pensé également à une variable du même type que ListeUnElemParEtiq qui jouerait le rôle d'intermédiaire entre ListeUnElemParEtiq et ListeElemsParEtiq, sauf que cela ne marche pas non plus : J'en conclus donc que tout se fait en mémoire (à la manière de variables pointées)...

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Function conversion_ListofLabels_en_ListeElemParEtiq(ByVal ListofLabels As List(Of data_access.LabelPrintingElement)) _
                    As List(Of List(Of loftware_access.ElementsEtiquetteLWL))
            'Déclaration des variables
            Dim ListeElemsParEtiq As New List(Of List(Of loftware_access.ElementsEtiquetteLWL))
            Dim ListeUnElemParEtiq As New List(Of loftware_access.ElementsEtiquetteLWL)
    
            Dim ListeTemp As New List(Of loftware_access.ElementsEtiquetteLWL)
    
            Dim ElementsEtiquetteLWL As loftware_access.ElementsEtiquetteLWL
    
            'Exécution
            For i As Integer = 0 To ListofLabels.Count - 1
                ElementsEtiquetteLWL.LibelleElementLWL = "etiq_num"
                ElementsEtiquetteLWL.ValeurElementLWL = ListofLabels.Item(i).etiq_num
                'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
                ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)
    
                ElementsEtiquetteLWL.LibelleElementLWL = "etiq_dateheure"
                ElementsEtiquetteLWL.ValeurElementLWL = Format(ListofLabels.Item(i).etiq_dateheure, "dd/MM/yyyy")
                'on ajoute l'élement dans ListeUnElemParEtiq (ajout d'1 seul élement de liste structurée)
                ListeUnElemParEtiq.Add(ElementsEtiquetteLWL)
                '----------------------------------------------------------
                'on ajoute le tout dans la liste de liste ListeElemsParEtiq
                '----------------------------------------------------------
                ListeTemp = ListeUnElemParEtiq
    
                ListeElemsParEtiq.Add(ListeTemp)
                'on nettoie les valeurs précédemment passées dans ListeUnElemParEtiq.Clear
                ' afin que cela ne produise pas un comportement anormal dans ListeElemsParEtiq
                ListeUnElemParEtiq.Clear()
    
            Next
            ' ListeElemParEtiq.Add(ListeUnElemParEtiq)
            Return ListeElemsParEtiq
        End Function
    Peut-être existe-t'il une manière plus simple d'allouer les valeurs sans passer par des étapes intermédiaires ou une astuce... Enfin je vous laisse libre de tout choix technique tant que je garde les mêmes entrées/sorties.

    Merci de vous êtes accroché(e)s jusqu'au bout!

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    que veux tu faire plutot parce que le pavé de code en noir j'ai pas suivi ...
    et y a ptete d'autres méthodes
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Je souhaiterais convertir ma "structure d'entrée" en "structure de sortie" de manière partiellement dynamique (en correspondance avec les champs etiq_num et etiq_dateheure).

    Toute solution autre sera bonne à prendre et très probablement prise! (J'avais pensé à une arborescence en XML ... mais je ne maîtrise pas du tout). Au fait, je travaille sous le framework2 de .net et VS2005.

    Bien cordialement.

    PS : (Je suis également prêt à faire sauter ma structure de sortie si je garde une arborescence).

    X troncs, 2 branches, 2 fruits (faisant référence à ma structure de données composée de 2 élèments)!

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Tu as deux solutions, soit implémenter le cast explicit, soit avoir une méthode statique sur la classe à convertir qui retourne le classe convertie.

    Je te montre comment implémenter le cast.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
        class ClassA
        {
            private string m_name;
     
            public ClassA()
            {
            }
     
            public ClassA(string name)
            {
                m_name = name;
            }
     
            public string Name
            {
                get { return m_name; }
                set { m_name = value; }
            }
        }
     
        ...
     
        class ClassB
        {
            private string m_firstName;
     
            public ClassB()
            {
            }
     
            public ClassB(string firstName)
            {
                m_firstName = firstName;
            }
     
            public string FirstName
            {
                get { return m_firstName; }
                set { m_firstName = value; }
            }
     
            public static explicit operator ClassB(ClassA from)
            {
                return new ClassB(from.Name);
            }
        }
     
        ...
     
        ClassA objA = new ClassA("Jean Dupont");
        ClassB objB = (ClassB)objA;

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    Citation Envoyé par D3Vavenir Voir le message
    Je souhaiterais convertir ma "structure d'entrée" en "structure de sortie" de manière partiellement dynamique (en correspondance avec les champs etiq_num et etiq_dateheure).

    Toute solution autre sera bonne à prendre et très probablement prise! (J'avais pensé à une arborescence en XML ... mais je ne maîtrise pas du tout). Au fait, je travaille sous le framework2 de .net et VS2005.

    Bien cordialement.

    PS : (Je suis également prêt à faire sauter ma structure de sortie si je garde une arborescence).

    X troncs, 2 branches, 2 fruits (faisant référence à ma structure de données composée de 2 élèments)!


    ce n'est pas très explicite
    les interfaces pourraient peut etre t'aider ou alors des classes (Of ..) ou encore une classe générique avec des overrides sur les choses différentes
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Par défaut
    Comme vous vous en doutez, je ne suis pas un pro de l'architecture .net . Et VB .Net ne déroge pas à la règle (cast explicit,... tout ça, je ne connais pas).
    (Des fois, on peut vraiment se sentir con... )

    Désolé de manquer de clarté, mais il me parait difficile d'être plus clair.

    Je récapitule :

    1)J'ai une liste structurée en entrée.

    Cette liste structurée représente une étiquette composée de :
    -son numéro d'étiquette (etiq_num) (libellé+valeur)
    -sa date/son heure (etiq_dateheure) (libellé+valeur)


    2)je souhaite récupérer en sortie cette liste sous la structure suivante :
    -Libellé ("etiq_num" ou "etiq_date")
    -Valeur ("451000" ou "14/02/2005")

    Sachant que j'aurais pour chaque étiquette à produire 2 libellé ET 2 valeurs (puisqu'une étiquette est composée de "etiq_num" ET "etiq_date" (d'où l'idée d'une liste de listes).

    La contrainte
    : Je dois absolument garder une structure "générique" de sortie, donc non prévue pour un cas spécifique : genre ceci (en imageant):

    listof (tab[2] of string)

    Cdlt.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    désolé mais je cromprends pas trop quand meme

    pourquoi ne pas faire

    structure machin
    lib as string
    valeur as object

    structure etiquette
    num as machin
    date as machin


    sinon il est aussi possible de faire
    class machin (Of blabla)
    public lib as string
    public valeur as blabla

    et d'instancier de la sorte dim a as new machin(of datetime)



    enfin j'ai l'impression que vous n'etes pas partie sur la bonne piste
    vous parlez d'entrée et de sortie, qu'y a t il au milieu ? que doit faire le programme exactement ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Problème avec l'ajout d'une colonne dans un JTable
    Par khadi8 dans le forum Composants
    Réponses: 12
    Dernier message: 15/04/2012, 18h56
  2. Problème avec l'ajout d'action dans le menu
    Par F0ul dans le forum Débuter
    Réponses: 3
    Dernier message: 31/03/2009, 10h56
  3. Problème avec l'ajout d'une API dans Eclipse
    Par patachnouk dans le forum Eclipse
    Réponses: 6
    Dernier message: 18/08/2006, 17h49
  4. Problème avec requête ajout
    Par mitnick32 dans le forum Access
    Réponses: 1
    Dernier message: 02/02/2006, 19h02
  5. [C#] problème avec l'insertion des données dans MySQL
    Par madica dans le forum Accès aux données
    Réponses: 7
    Dernier message: 08/11/2005, 14h27

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