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 :

DataGrid + Combobox + Dictionnaire [Débutant]


Sujet :

Windows Presentation Foundation

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 20
    Points
    20
    Par défaut DataGrid + Combobox + Dictionnaire
    Bonjour,

    le sujet à été maintes fois abordés mais je bloque....

    Voici la situation :
    J' ai un dictionnaire <string>,List<string> que l'on peut décrire comme ceci :
    Fournisseur1 - list<Produits1>
    Fournisseur2 - list<Produits2>
    Fournisseur3 - list<Produits3>

    Mon dataGrid est composé de trois colonnes : Fournisseur - Modele - List<produit>
    La dernière colonne est une combobox.

    Je n'arrive pas à afficher dans la combobox uniquement les valeur de la liste dépendant de la première colonne (cf dictionnaire).

    PS: j'arrive bien à avoir les bonnes valeurs dans mes deux premières colonnes et à avoir une combobox dans la troisième mais celle-ci reste vide.

    J'espère avoir été clair. Merci pour votre aide.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Voici le bout de code que j'ai fais pour le moment

    XAML:
    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
     
    <Grid>
            <DataGrid ItemsSource="{Binding test}" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Fournisseur" Binding="{Binding Fournisseur}" />
                    <DataGridTextColumn Header="Modèle" Binding="{Binding Modèle}"/>
                    <DataGridTemplateColumn Header="Produit" Width="100">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="produits"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding dict}" DisplayMemberPath="Value" SelectedValuePath="{Binding Fournisseur}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    C#:
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    public partial class MainWindow : Window
        {
            public ObservableCollection<Produit> test { get; set; }
            public Dictionary<string, List<string>> dict { get; set; }
     
     
            public MainWindow()
            {
                this.DataContext = this;
                test = new ObservableCollection<Produit>();
                test.Add(new Produit("Fournisseur1", "Modèle"));
                test.Add(new Produit("Fournisseur2", "Modèle"));
                test.Add(new Produit("Fournisseur3", "Modèle"));
     
     
                dict = new Dictionary<string, List<string>>();
                List<string> lst1 = new List<string>();
                lst1.Add("Product11");
                lst1.Add("Product12");
                lst1.Add("Product13");
                dict.Add("Fournisseur1", lst1);
                List<string> lst2 = new List<string>();
                lst2.Add("Product21");
                lst2.Add("Product22");
                lst2.Add("Product23");
                dict.Add("Fournisseur2", lst2);
                List<string> lst3 = new List<string>();
                lst3.Add("Product31");
                lst3.Add("Product32");
                lst3.Add("Product33");
                dict.Add("Fournisseur3", lst3);
     
     
                InitializeComponent();
     
            }
     
     
     
     
     
            public class Produit
            {
                private string _Fournisseur;
                private string _Modèle;
     
     
                public Produit(string fournisseur, string modele)
                {
                    _Fournisseur = fournisseur;
                    _Modèle = modele;              
                }
     
     
                public string Fournisseur
                {
                    get { return _Fournisseur; }
                    set { _Fournisseur = value; }
                }
                public string Modèle
                {
                    get { return _Modèle; }
                    set { _Modèle = value; }
                }
            }
        }
    Merci

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    voila ce que ca pourrait donner
    en plus c'est plus coherent au niveau conceptuel

    dans window
    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
               this.DataContext = this;
                test = new ObservableCollection<Produit>();
                {
                    Produit f = new Produit("Fournisseur1", "Modèle");
                    f.Add("Product11");
                    f.Add("Product12");
                    f.Add("Product13");
                    test.Add(f);
                }
                {
                    Produit f = new Produit("Fournisseur 2", "Modèle");
                    f.Add("Product21");
                    f.Add("Product22");
                    f.Add("Product23");
                    test.Add(f);
                }
                {
                    Produit f = new Produit("Fournisseur 3", "Modèle");
                    f.Add("Product31");
                    f.Add("Product32");
                    f.Add("Product33");
                    test.Add(f);
                }
    class produit
    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
      public class Produit
        {
            private string _Fournisseur;
            private string _Modèle;
     
            public Produit(string fournisseur, string modele)
            {
                _Fournisseur = fournisseur;
                _Modèle = modele;
            }
     
            public string Fournisseur
            {
                get { return _Fournisseur; }
                set { _Fournisseur = value; }
            }
            public string Modèle
            {
                get { return _Modèle; }
                set { _Modèle = value; }
            }
            List<string> _List = new List<string>();
     
            public List<string> List
            {
                get { return _List; }
                private set { _List = value; }
            }
     
            public void Add(string value)
            {
                this._List.Add(value);
            }
        }
    et le code xaml (faudra que tu regarde ou tu veux enregistrer le selected item)
    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
    <DataGrid ItemsSource="{Binding test}"
                      AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Fournisseur"
                                        Binding="{Binding Fournisseur}" />
                    <DataGridTextColumn Header="Modèle"
                                        Binding="{Binding Modèle}" />
                    <DataGridTemplateColumn Header="Produit"
                                            Width="100">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="produits" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding List}"
                                          />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>

    pour comprendre pourquoi ca marchait pas :
    - il aurait fallu faire un binding sur un element de la fenetre pour le item source de la combo donc
    ajouter un x:name="win" a la fenetre
    - changer le dictionnaire pour avoir un accesseur public (get)
    - puis faire {Binding dict, elementname=win} et passer un parametre sur l'element fournisseur
    comme si on avait cela par exemple {Binding dict[fournisseur], elementname=win}
    cela dit ca aurait compliqué pour le selected item (vu qu'on saurait pas ou le mettre)
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    je t'ai pas connecté le selected item vu que je sais pas ou tu veux le mettre
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien
    Inscrit en
    Juin 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Juin 2014
    Messages : 19
    Points : 20
    Points
    20
    Par défaut
    Super, ça marche nikel.

    Merci beaucoup.


  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 562
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 562
    Points : 1 313
    Points
    1 313
    Par défaut
    en modifiant ton code tu peux meme ameliorer la chose
    regarde ca
    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
    <DataGrid ItemsSource="{Binding test}"
                      AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="Fournisseur"
                                        Binding="{Binding Fournisseur}" />
                    <DataGridTextColumn Header="Modèle"
                                        Binding="{Binding Modèle}" />
                    <DataGridTemplateColumn Header="Produit"
                                            Width="200">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Current}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding List}"
                                          SelectedItem="{Binding Current}"
                                          />
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
    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
     public class Produit
        {
            private string _Fournisseur;
            private string _Modèle;
     
            public Produit(string fournisseur, string modele)
            {
                _Fournisseur = fournisseur;
                _Modèle = modele;
                Current = "Selectionnez un produit";
            }
     
            public string Fournisseur
            {
                get { return _Fournisseur; }
                set { _Fournisseur = value; }
            }
            public string Modèle
            {
                get { return _Modèle; }
                set { _Modèle = value; }
            }
            List<string> _List = new List<string>();
     
            public List<string> List
            {
                get { return _List; }
                private set { _List = value; }
            }
     
            public void Add(string value)
            {
                this._List.Add(value);
            }
     
            public string Current { get; set; }
        }
    IKEAS : Finalement je crois que c'est dans ses faiblesses que l'on y trouve a la fois de la force et a la fois de la richesse...
    ----------------------------------------------------
    Si vous avez du taf en wpf & design d'application sympa, contactez moi !!!!
    http://ultimatecorp.eu/wpf/

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

Discussions similaires

  1. DataGrid, Combobox binding
    Par Lionhart dans le forum C#
    Réponses: 5
    Dernier message: 01/07/2014, 16h35
  2. Datagrid & Combobox avec entity
    Par deathspirit dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 29/01/2013, 14h08
  3. DataGrid & ComboBox
    Par MathieuMN dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 07/02/2012, 14h47
  4. [Flex3] Datagrid : combobox et edition
    Par maxime_c dans le forum Flex
    Réponses: 2
    Dernier message: 29/07/2011, 10h05
  5. [FLASH MX] dataset datagrid combobox
    Par totoche dans le forum Flash
    Réponses: 1
    Dernier message: 03/08/2005, 17h55

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