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 :

[Net3.5]DataGrid. Style de cellule contenant une ComboBox. ItemsSource ?


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut [Net3.5]DataGrid. Style de cellule contenant une ComboBox. ItemsSource ?
    Bonjour,

    J'utilise WPFToolKit pour pouvoir exploiter un DataGrid.
    Je dispose de différentes classes dont certains membres peuvent être des collections. Je voudrais afficher une liste d'objets d'une même classe dans le DataGrid.

    Si je garde la propriété AutoGenerateColumns à True. Les colonnes générées sont des DataGridTextColumn pour afficher les collections.
    Donc, pour afficher le contenu de ces collections, je change le style de cellule afin quelles contiennent un ComboBox. Je profite de l'évenement AutoGeneratingColumn pour le faire.
    Le ComboBox est défini dans un DataTemplate. Mais voilà le problème : Je n'arrive pas à indiquer quelle est la collection à parcourir par le ComboBox.
    Sachant que n'importe quelle classe peut être affichée, je ne tiens pas à indiquer un noms de membre précis.


    Voici un exemple simple :
    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
    22
     
    <Window x:Class="WpfEssais.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
            Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
        <Grid x:Name="layoutRoot">
            <Grid.Resources>
     
                <DataTemplate x:Key="CollectionData"  >
                    <ComboBox ItemsSource="{Binding ???}" ></ComboBox>
                </DataTemplate>
     
                <Style x:Key="dgCell" TargetType="dg:DataGridCell">
                    <Setter Property="ContentTemplate" Value="{StaticResource CollectionData}"/>
                </Style>
     
            </Grid.Resources>
     
            <dg:DataGrid x:Name="dg" ItemsSource="{Binding}" AutoGeneratingColumn="dg_AutoGeneratingColumn" IsReadOnly="True" ></dg:DataGrid>
        </Grid>
    </Window>
    Code behind:
    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
     
    using System.Collections.Generic;
    using System.Windows;
    using System.Windows.Documents;
     
    namespace WpfEssais
    {
        /// <summary>
        /// Logique d'interaction pour MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
     
            private void Window_Loaded(object sender, RoutedEventArgs e)
            {
                List<elm> l = new List<elm>();
                l.Add(new elm { Nom = "Fou", Choses = new string[] { "Pinceau", "Echelle" }});
                l.Add(new elm { Nom = "Henri IV", Choses = new string[] { "Cheval", "Pot" } });
                dg.DataContext = l;
            }
     
            private void dg_AutoGeneratingColumn(object sender, Microsoft.Windows.Controls.DataGridAutoGeneratingColumnEventArgs e)
            {
                if (e.PropertyType.IsArray)
                {
                    e.Column.CellStyle = (Style)layoutRoot.Resources["dgCell"];
                }
            }
     
        }
     
        public class elm
        {
            public string Nom { get; set; }
            public string[] Choses { get; set; }
     
        }
    }
    Dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox ItemsSource="{Binding ???}" ></ComboBox>
    est-il possible de se référer à un element ancêtre afin de pouvoir rester dans des termes génériques et éviter de donner un nom de collection membre de la classe bindée au DataGrid. Et comment faire ?

    Par avance merci.
    Luis

  2. #2
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Est-ce que ce bout de code ne marche pas ? :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox ItemsSource="{Binding}" />

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 7
    Par défaut
    Citation Envoyé par jmix90 Voir le message
    Hello,

    Est-ce que ce bout de code ne marche pas ? :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox ItemsSource="{Binding}" />
    Bonjour et merci de votre réponse, mais cela ne fonctionne pas. La combo est vide.

    Normalement cela fonctionne quand j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ComboBox ItemsSource="{Binding Choses}" />[/
    mais je veux essayer de l'éviter au cas où il y aurait plusieurs colonnes de ce type à afficher.

    En fait, le but est de pouvoir afficher dans un DataGrid une collection d'un même type d'objet ayant des membres simple (string, int...) et des collections différentes (string[], int[]...). Le nombre et le type des membres pouvant varier.


    Bonne soirée.
    Luis

Discussions similaires

  1. [JTable] Cellule contenant une JTable
    Par lastrecrue dans le forum Composants
    Réponses: 5
    Dernier message: 30/09/2008, 16h02
  2. Réponses: 8
    Dernier message: 17/03/2008, 13h01
  3. Récupérer la cellule contenant une image
    Par phpphp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2007, 15h45
  4. [CSS]probleme de style sur cellules dans une table
    Par luimême dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 17/01/2006, 12h13
  5. Recherche cellule contenant une chaine
    Par the java lover dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/11/2005, 15h37

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