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

C# Discussion :

Génération dynamique onglet et listbox [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut Génération dynamique onglet et listbox
    Bonjour à tous,

    Je rencontre un petit problème avec une génération dynamique d'onglets et un listbox contenu dans chaque onglet.

    La génération d'onglet fonctionne, l'ajout de la listbox fonctionne ... mais je n'arrive pas a avoir un contenu différent dans chaque listbox. Lorsque je test, j'obtiens des datarows avec un nombre de ligne différent, mais a la fin de l'exécution, tous les listbox de chaque onglets contiennent uniquement le contenu du dernier datarow. C'est comme si je n'avais qu'un seul listbox.

    Comme tout est dynamique, je n'ai aucune déclaration dans le XAML.

    - Dossier est un object qui contient un datatable dtfilelist
    - Dossier contient une liste sdos la liste des onglets a créer

    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
                DataTable dt1 = new DataTable();
                ListBox lb = new ListBox();
     
                string select = "";
                foreach (string newtab in dossier.sdos)
                {
                    select = "tab = '" + newtab+"'";
                    dt1.Clear();
     
                    DataRow[] result = dossier.dtfilelist.Select(select);
                    if (result.Length > 0)
                    {
                        dt1 = result.CopyToDataTable();
                        listBox1.ItemsSource = dt1.DefaultView;
                    }
                    lb.ItemsSource = dt1.DefaultView;
                    lb.Name = "list" + newtab;
     
                    TabItem tab = new TabItem();
                    tab.Header = newtab.ToString();
                    tab.Name = newtab.ToString();
                    var item = new TabItem
                    {
                        Header = newtab.ToString(),
                        Name = newtab.ToString(),
                        Content = lb
                    };
                    tabControl1.Items.Add(item);
     
                }
    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Developpeur
    Inscrit en
    Février 2013
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2013
    Messages : 180
    Par défaut
    tu as juste une petit problème, lorsque tu instancie tes listbox ou devrait dire t'as listbox dans ton cas
    Fait attention a quel objet tu modifie, dans tas boucle tu modifie le contenue de tas listbox mais celle ci n'appartient pas a ton control tab
    donc ça a pour effet que tu as N tab et 1 listbox, même si tu vois des listbox dans chaque tab, en réalité tu n'en as qu'un seul en mémoire.

    pour pallier a ton souci, change l'endroit ou tu instancie ton nouveau listbox (celui ci doit ce trouver dans la boucle qui parcours tes tableaux)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Bonjour ranzoken,

    Merci, cela a partiellement solutionner le problème. Comme tu me l'as parfaitement expliquer j'ai intégrer dans la boucle la création du listbox.

    J'ai maintenant avec mon jeu d'essai 3 onglets, le 1er est vide et c'est normal, le 2eme est vide et c'est pas normal, le 3eme contient bien les bonnes données correspondant à l'onglet.

    Quand je débug, sur le 2eme listbox du 2eme onglet, j'ai sur lb un item.count = 64 , mais lors de l'affichage il est vide.

    Merci pour votre aide.

    Modification du code de la boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                ListBox lb = new ListBox();
     
                string select = "";
                foreach (string newtab in dossier.sdos)
                {
                    lb = new ListBox();
                    select = "tab = '" + newtab+"'";

  4. #4
    Membre expérimenté
    Homme Profil pro
    Developpeur
    Inscrit en
    Février 2013
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2013
    Messages : 180
    Par défaut
    Ton problème viens du faite que tu n'as pas assez posé t'es idées, Fait attention à quel objet tu modifie.
    si tu connais l'UML, un diagramme d'activité devrait t'aider à résoudre ton problème par toi même.

    Sinon prend une feuille de papier et un crayon et écrit ce que tu doit faire,
    1 - je crée ma liste de tableau
    2 - je parcours ma liste de tableau (boucle foreach sur mon objet tab)
    3 - si c'est le premier onglet je passe je fait rien
    4 - si ce n'est pas le premier onglet je crée un nouveau control listbox
    5 - je vais cherche mes donnée
    6 - je lie mes donnée avec mon listbox
    7 - fin de ma boucle je remonte en haut

    en écrivant ce que tu veux faire, ça te permettra de voir rapidement ce qui peux mal ce passé et ou tu risque d'avoir des difficultés.
    Après si tu veux un code tout fait, et fonctionnel, écrit ce que tu veux faire en expliquant bien tout, et quelqu'un pourra le faire, mais pour moi tu as juste besoin de posé tes idée et la solution apparaitra d'elle même.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Merci,

    Ce que tu propose, c'est un changement de logique pour la création :
    1. Recup de la liste des onglets a créer
    2. Parcours la liste des onglets a créer (foreach sur la liste des onglets a créer)
    3. Création du listbox
    4. Filtre les données a afficher dans le listbox
    5. Chargement des données dans le liste box (si plus 0 ligne)
    6. Création de l'onglet (nom+ entete + listbox)
    7. Ajout de l'onglet au tabcontrol1
    8. Fin de boucle onglet suivant a créer


    Je vais essayer avec ta méthode ... et je vais chercher comment parcourir les onglets d'un tabcontrol et ajouter un controle a un onglet existant (vive Google Search)

    Je reviens si cela ne marche pas

    Merci pour ton aide

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 219
    Par défaut
    Bonsoir,

    Par rapport à la logique fourni, voici mon code

    • Le premier onglet est vide (pas de listbox présente)
    • Le deuxieme onglet a une listbox sans aucune valeur (dt1.rows.count=64)
    • Le troisième onglet à une listbox avec 31 valeurs (dt1.rows.count=31)




    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
                ListBox lb = null;
                Grid grid = null;
                string select = "";
                foreach (string newtab in dossier.sdos) // Création de la liste de tabitem
                {
     
                    var item = new TabItem
                    {
                        Header = newtab.ToString(),
                        Name = newtab.ToString(),
                        //Content = grid
                    };
                    tabControl1.Items.Add(item);
                }
     
                foreach (TabItem  titem in tabControl1.Items) // Parcours de la liste des onglets
                {
                    select = "tab = '" + titem.Header.ToString()+"'";
                    DataRow[] result = dossier.dtfilelist.Select(select); // Recherche valeur pour listbox
                    if (result.Length > 0)
                    {
                        dt1.Clear();
                        lb = new ListBox();
                        lb.Name = "list" + titem.Header.ToString();
                        dt1 = result.CopyToDataTable();
                        lb.ItemsSource = dt1.DefaultView;
                        lb.DisplayMemberPath = "filename";
                        grid = new Grid();
                        grid.Children.Add(lb);
                        titem.Content = grid;
                    }
                }
    Merci de votre aide, car je ne comprends pas pourquoi !!

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

Discussions similaires

  1. VB - Génération dynamique de controles dans un forme
    Par jeanangel dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 19/12/2005, 21h09
  2. [C#] Déplacer dynamiquement un controle ListBox
    Par ptchek dans le forum Windows Forms
    Réponses: 4
    Dernier message: 09/11/2005, 12h01
  3. [DOM] Génération dynamique fichier xml
    Par Fabouney dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 03/10/2005, 09h45
  4. [SQL*Plus] génération dynamique du fichier de spool
    Par lalystar dans le forum Oracle
    Réponses: 3
    Dernier message: 06/12/2004, 10h44
  5. Réponses: 7
    Dernier message: 22/10/2004, 16h18

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