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 :

TreeView dans un datagrid


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Par défaut TreeView dans un datagrid
    Bonjour,

    je débute en wpf, je dispose d'une liste d'objet A qui contient une liste d'objets B qui, elle aussi, contient une autre liste d'objets C

    A => List_B
    B => List_C

    Je voudrai afficher dans une colonne de DataGrid un TreeView dont le contenu sera comme ça :


    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
     
     
     +Objet_A1
                   Objet_B1
                   Objet_B2
                  + Objet_B3
                               Objet_C1
                               Objet_C2
                               Objet_C3
     
      +Objet_A2
                   Objet_B3
                   Objet_B4
                  + Objet_B5
                               Objet_C4
                               Objet_C5
                               Objet_C6

    Peut on le faire avec XAML sans pour autant passer au code ?

    Chaque Objet A,B et C dispose de sa propre classe.

    Quelqu'un peut m'aider ?

    Merci

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Tu peux utiliser une DataGridTemplateColumn et dans le template utiliser un TreeView.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Par défaut
    Citation Envoyé par Pragmateek Voir le message
    Tu peux utiliser une DataGridTemplateColumn et dans le template utiliser un TreeView.
    Merci d'avoir répondu, j'arrive à mettre le TreeView mais j'arrive pas à le remplir... J'obtiens le TreeView vide.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Il faut indiquer l'ItemsSource du TreeView en la bindant à la propriété représentant l'objet "A" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <TreeView ItemsSource="{Binding proprieteDontLeTypeEstAServantDeRacine}">
    </TreeView>

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2014
    Messages : 5
    Par défaut
    Citation Envoyé par Pragmateek Voir le message
    Il faut indiquer l'ItemsSource du TreeView en la bindant à la propriété représentant l'objet "A" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <TreeView ItemsSource="{Binding proprieteDontLeTypeEstAServantDeRacine}">
    </TreeView>
    Merci d'avoir repondu;

    Effectivement , c'est ce que je fais, mais j'obtiens pas ce que je veux :

    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
    <DataGridTemplateColumn Header="A" IsReadOnly="True">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
     
                                <TreeView ItemsSource="{Binding A_List}">
                                    <TreeView.ItemTemplate>
                                        <HierarchicalDataTemplate ItemsSource="{Binding B_List}" >
                                            <StackPanel Orientation="Horizontal">
                                                <TextBlock Text="{Binding B_Id}" />
                                                <TextBlock Text="{Binding B_C_ListCount}" />
                                            </StackPanel>
                                        </HierarchicalDataTemplate>
                                    </TreeView.ItemTemplate>
                                </TreeView>
     
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
    avce ce code j'obtiens une colonne vide.
    Merci de revoir le code

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Il faut plusieurs templates, un par type.

    Voici une façon de faire avec un modèle de données similaire :

    Code C# : 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    using System.Collections.Generic;
    using System.Windows;
     
    namespace TreeViewInDG
    {
        public class A
        {
            public string Label { get; set; }
            public IList<B> B_List { get; set; }
        }
     
        public class B
        {
            public string Label { get; set; }
            public IList<C> C_List { get; set; }
        }
     
        public class C
        {
            public string Label { get; set; }
        }
     
        public class Entity
        {
            public IList<A> A_List { get; set; }
        }
     
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
     
                dg.ItemsSource = new[]
                {
                    new Entity
                    {
                        A_List = new[]
                        {
                            new A
                            {
                                Label = "A #1",
                                B_List = new[]
                                {
                                    new B
                                    {
                                        Label = "A #1 / B #1",
                                        C_List = new[]
                                        {
                                            new C
                                            {
                                                Label = "A #1 / B #1 / C #1"
                                            },
                                            new C
                                            {
                                                Label = "A #1 / B #1 / C #2"
                                            }
                                        }
                                    },
                                    new B
                                    {
                                        Label = "A #1 / B #2"
                                    },
                                    new B
                                    {
                                        Label = "A #1 / B #2",
                                        C_List = new[]
                                        {
                                            new C
                                            {
                                                Label = "A #1 / B #2 / C #1"
                                            },
                                            new C
                                            {
                                                Label = "A #1 / B #2 / C #2"
                                            }
                                        }
                                    },
                                }
                            }
                        }
                    }
                };
            }
        }
    }

    Et le 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <Window x:Class="TreeViewInDG.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:local="clr-namespace:TreeViewInDG"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <DataGrid x:Name="dg">
                <DataGrid.Columns>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TreeView ItemsSource="{Binding A_List}">
                                    <TreeView.Resources>
                                        <HierarchicalDataTemplate DataType="{x:Type local:A}" ItemsSource="{Binding B_List}">
                                            <TextBlock Text="{Binding Label}"></TextBlock>
                                        </HierarchicalDataTemplate>
                                        <HierarchicalDataTemplate DataType="{x:Type local:B}" ItemsSource="{Binding C_List}">
                                            <TextBlock Text="{Binding Label}"></TextBlock>
                                        </HierarchicalDataTemplate>
                                        <DataTemplate DataType="{x:Type local:C}">
                                            <TextBlock Text="{Binding Label}"></TextBlock>
                                        </DataTemplate>
                                    </TreeView.Resources>
                                </TreeView>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Window>

Discussions similaires

  1. Réponses: 13
    Dernier message: 14/06/2004, 15h35
  2. [VB.NET] Tooltips dans un DataGrid
    Par seemax dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/04/2004, 14h16
  3. Pb d'update dans une DataGrid
    Par bidson dans le forum XMLRAD
    Réponses: 11
    Dernier message: 27/05/2003, 14h11
  4. [VB.NET] Insérer une colonne de CheckBox dans un DataGrid
    Par Manue.35 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2003, 11h44

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