none
Datagrid DataGridComboBoxColumn ItemsSource dynamique RRS feed

  • Question

  • Bonjour

    J'ai une datagrid charge par une

    Est il possible de charger une combo différemment d'une ligne à l'autre par rapport à une des valeurs disponibles dans la ligne (source de donnée de la datarid)

    <DataGridComboBoxColumn Header="" MinWidth="200" SelectedValueBinding="{Binding idAxeValeur}" 
                                            SelectedValuePath="idAxeValeur" 
                                            DisplayMemberPath="Nom" 
                                            ItemsSource="{Binding LstAxeValeur}"/>

    LstAxeValeur devrait être different d'un enregistrement à l'autre.

    Comment faire?

    Merci


    FB

    mercredi 27 novembre 2013 21:34

Réponses

Toutes les réponses

  • Bonjour,

    Oui c'est possible, mais il faut :

    • Avoir un modèle qui contient une liste de choix possible pour chaque ligne. Par exemple, si vous affichez une liste d'objet Facture, il faudra dans le modèle Facture y intégrer une propriété "ChoixPossible" de type List de "Choix".
    • Customiser vos cellules afin d'y insérer votre ComboBox.
    • Binder le ComboBox sur la propriété "ChoixPossible".

    Un bon exemple d'implémentation : http://social.msdn.microsoft.com/Forums/vstudio/en-US/20926f15-dc1c-4fc1-8450-39d16dbb5a45/datagridcombobox-with-different-itemssource-per-row

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mercredi 27 novembre 2013 23:58
    Modérateur
  • J'ai le message d'erreur suivant :

    System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=CBList; DataItem=null; target element is 'DataGridComboBoxColumn' (HashCode=47914789); target property is 'ItemsSource' (type 'IEnumerable')


    jeudi 28 novembre 2013 22:45
  • Voici mon XAML
            <DataGrid  AutoGenerateColumns="False" EnableRowVirtualization="True"  Grid.Row="1"
                       ItemsSource="{Binding Lst}"  SelectedItem="{Binding CurrentLigne}"
                       RowDetailsVisibilityMode="VisibleWhenSelected">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Data.idModeleAxe}" Visibility="Hidden"/>
                    <DataGridTextColumn Binding="{Binding Data.idModele}" Visibility="Hidden"/>
                    <DataGridTextColumn Binding="{Binding Data.Libelle}" IsReadOnly="True" />
                    <DataGridComboBoxColumn Header="Valeur" MinWidth="200" SelectedValueBinding="{Binding Data.idAxeValeur}" 
                                            SelectedValuePath="idAxeValeur" 
                                            DisplayMemberPath="Nom" 
                                            ItemsSource="{Binding CBList}"/>
                </DataGrid.Columns>
            </DataGrid>

    FB


    jeudi 28 novembre 2013 22:47
  • "Lst" est une liste de "Ligne" chargée ainsi

    Lst = New List(Of Ligne)
    Dim iCBLst As List(Of I_Axe_Tot) = AccCat.GetAxe_Tot("", "", " idAxe in (" & strAxes & ")", False).ToList
    Dim lng As Ligne = Nothing
    For Each iElt In iLst
           lng = New Ligne()
           CurrentLigne = lng
           lng.Data = iElt
           CBList = (From ax In iCBLst Where ax.idAxe = iElt.idAxe Order By ax.OrdreCalcule).ToList
           lng.isDirty = False
           Lst.Add(lng)
    Next

    On peut voir que "CBList" est une propriété de "Ligne"

    INotifyPropertyChanged est implémenté

    En débug, je constate que tout est chargé comme il faut.

    Pouvez vous m'aider svp?



    jeudi 28 novembre 2013 22:48
  • Bonjour François

    Voir la réponse marquée ici :

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/b4b13a72-47f9-452f-85c6-6c4b5b606df5/systemwindowsdata-error-2-cannot-find-governing-frameworkelement-or-frameworkcontentelement

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 4 décembre 2013 13:50
  • J'ai résolu le problème en plaçant la propriété suivante :

    Public Property CBList As List(Of I_Axe_Tot) Get Return CurrentLigne.CBList End Get Set(value As List(Of I_Axe_Tot)) CurrentLigne.CBList = value OnProprieteModifiee("CBList") End Set End Property.

    Ainsi l'itemssource se redirige sur la ligne courante de mon objet principal

    Merci


    FB

    • Marqué comme réponse Aurel Bera mercredi 4 décembre 2013 14:56
    mercredi 4 décembre 2013 14:03