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

Windows Presentation Foundation Discussion :

[C#] remplir treeview checkbox avec dataset


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut [C#] remplir treeview checkbox avec dataset
    bonjour,

    j'ai un petit probleme pour remplir un treecheckview (wpf) par le code.

    mon dataset contient les tables liées (pays, regions, communes), dont chaque tables contient un champ booléen "visible".

    je veux remplir mon treeview avec comme noeuds principaux les differents pays de ma table "Pays" et cocher le checkbox correspondant si le champ "visible" a la valeur "true".

    ensuite je veux remplir les noeuds fils de la même maniere....

    problème je n'y arrive pas

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Il faut utiliser des HierarchicalDataTemplate. Tu peux les imbriquer pour gérer chaque niveau :

    Code XAML : 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
     
            <TreeView ItemsSource="{Binding Pays}">
                <TreeView.ItemTemplate>
                    <!-- DataTemplate pour les pays -->
                    <HierarchicalDataTemplate ItemsSource="{Binding Pays_Region}">
                        <CheckBox Content="{Binding Nom}" IsChecked="{Binding Visible}" />
                        <HierarchicalDataTemplate.ItemTemplate>
                            <!-- DataTemplate pour les régions -->
                            <HierarchicalDataTemplate ItemsSource="{Binding Region_Commune}">
                                <CheckBox Content="{Binding Nom}" IsChecked="{Binding Visible}" />
                                <HierarchicalDataTemplate.ItemTemplate>
                                    <!-- DataTemplate pour les communes -->
                                    <DataTemplate>
                                        <CheckBox Content="{Binding Nom}" IsChecked="{Binding Visible}" />
                                    </DataTemplate>
                                </HierarchicalDataTemplate.ItemTemplate>
                            </HierarchicalDataTemplate>
                        </HierarchicalDataTemplate.ItemTemplate>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
            </TreeView>

    Dans le code ci-dessus, j'ai du faire quelques suppositions sur ton code, si elles sont fausses il faudra adapter un peu selon ton besoin :
    - le DataContext est déjà le DataSet
    - tu as défini des relations entre les tables de ton DataSet (Pays_Region et Region_Commune)
    - il y a des colonnes "Nom" et "Visible" dans tes tables

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    salut,

    merci pour ton aide, par contre j'ai besoin de précision.

    ma DB (mdb) contient donc les trois tables:

    Pays:
    - PAYS_ID
    - PAYS_VISI
    - PAYS_NOM

    Regions:
    - REG_ID
    - REG_PAYS
    - REG_VISI
    - REG_NOM

    Communes:
    - COM_ID
    - COM_REG
    - COM_NOM

    j'ai deux liaisons:

    - Pays.PAYS_ID >> Regions.REG_PAYS (PaysRegions)
    - Regions.REG_ID >> Communes.COM_REG (RegionsCommunes)


    Sous C# j'ai créé un DataSet (DataSetRegion) avec les deux liaisons PaysRegions et RegionsCommunes.

    Par contre je n'arrive pas a remplir ce Dataset et le lier au Treeview.

    De plus est-il possible de faire le binding par le code C# plutôt que par le code XAML?

    j'utilise WPF pour sa souplesse niveau interface graphique, mais niveau binding je suis pas a l'aise.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par waspy59 Voir le message
    Par contre je n'arrive pas a remplir ce Dataset et le lier au Treeview.
    Je pensais que tu l'avais déjà rempli... qu'est-ce qui te bloque exactement ? Qu'as-tu essayé ?

    Citation Envoyé par waspy59 Voir le message
    De plus est-il possible de faire le binding par le code C# plutôt que par le code XAML?
    Si tu veux... mets juste la table Pays comme ItemsSource du TreeView. Par contre les bindings dans les DataTemplate tu es un peu obligé de les faire en XAML (c'est possible de créer les templates en C#, mais c'est galère)

    Citation Envoyé par waspy59 Voir le message
    j'utilise WPF pour sa souplesse niveau interface graphique, mais niveau binding je suis pas a l'aise.
    ça viendra vite, avec la pratique

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 362
    Par défaut
    re,

    Bon, j'ai testé cela niveau code:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void ChargementDataset()
            {
                TreeView Treeview = new TreeView();
                DataSetRegion DataSetRegion = new DataSetRegion();
                DataSetRegionTableAdapters.PaysTableAdapter PaysTableAdapter = new DataSetRegionTableAdapters.PaysTableAdapter();
                DataSetRegionTableAdapters.RegionsTableAdapter RegionsTableAdapter = new DataSetRegionTableAdapters.RegionsTableAdapter();
                PaysTableAdapter.Fill(DataSetRegion.Pays);
                RegionsTableAdapter.Fill(DataSetRegion.Regions);
                Treeview.DataContext = DataSetRegion;
            }

    et niveau XAML

    Code xaml : 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
     
    <TreeView ItemsSource="{Binding Pays}" Margin="54,38,50,95">
                <TreeView.ItemTemplate>
                    <!-- DataTemplate pour les pays -->
                    <HierarchicalDataTemplate ItemsSource="{Binding PaysRegions}">
                        <CheckBox Content="{Binding PAYS_NOM}" IsChecked="{Binding Visible}" />
                        <HierarchicalDataTemplate.ItemTemplate>
                            <!-- DataTemplate pour les régions -->
                            <HierarchicalDataTemplate ItemsSource="{Binding RegionsCommunes}">
                                <CheckBox Content="{Binding REG_NOM}" IsChecked="{Binding Visible}" />
     
                            </HierarchicalDataTemplate>
                        </HierarchicalDataTemplate.ItemTemplate>
                    </HierarchicalDataTemplate>
                </TreeView.ItemTemplate>
            </TreeView>

    et nada.....

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    C'est normal que ça donne rien, le TreeView que tu crées dans ChargementDataset n'est pas celui qui est affiché... tu n'as pas besoin d'en créer un nouveau, utilise celui qui est déclaré en XAML (ça suppose de lui donner un nom bien sûr)

    D'autre part, tu as repris exactement le code que je t'ai donné, mais il faut l'adapter pour mettre tes noms de tables, colonnes et relations. Par exemple, au lieu de "Visible", il faut mettre "PAYS_VISI", "REG_VISI" ou "COM_VISI" (selon les cas)

Discussions similaires

  1. [Débutant] Problème avec dataset pour remplir listbox
    Par lordsion dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/06/2011, 17h11
  2. Remplir champ texte avec valeur checkbox
    Par Flushovsky dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/04/2011, 20h20
  3. remplir plusieurs champs avec une checkbox Recherche :
    Par jules_diedhiou dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 31/01/2009, 12h58
  4. Remplir tableau avec DataSet
    Par Aizen64 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/06/2008, 00h04
  5. remplir un datagridview avec un dataset
    Par Yogy dans le forum C#
    Réponses: 8
    Dernier message: 28/02/2008, 10h55

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