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

Silverlight Discussion :

Mettre un comboBox dans un datagrid


Sujet :

Silverlight

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut Mettre un comboBox dans un datagrid
    Bonjour,

    J'ai un datagrid qui me sert à rajouter des adresses dans une table "ClientsTbl"

    Ma table "ClientsTbl" est liée par une foreign key à ma table "PaysTbl" de sorte que c'est l'identifiant du pays qui est stocké dans ma table "ClientsTbl" et pas le nom du pays.

    Le problème est évidemment que je ne peux pas demander à l'utilisateur d'encoder l'identifiant du pays, il ne le connait pas. Il me faut donc un combobox qui apparait dans la datagrid.

    J'ai regardé dans le Microsoft silverlight Toolkit mais il n'y a rien sur les combobox et surement rien sur les combobox dans les datagrid.

    Pouvez-vous m'aider ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Il faut que tu definisses ta propre colonne de type DataGridTemplateColumn

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <data:DataGridTemplateColumn>
        <data:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox />
            </DataTemplate>
        </data:DataGridTemplateColumn.CellTemplate>
    </data:DataGridTemplateColumn>

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Merci pour ta réponse.

    Le combo apparait bien dans le dataGrid, par contre, aucune donnée n'apparait dedans. Voici le code:
    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
     <data:DataGridTemplateColumn> <!--Header="Country" Binding="{Binding RevCountry}" Visibility="Visible" IsReadOnly="False" Width="50">-->
                                    <data:DataGridTemplateColumn.CellTemplate>
                                        <DataTemplate>
                                            <ComboBox  Width="70" Height="35"  ItemsSource="{Binding Data, ElementName=CountryDS}" >
                                                <ComboBox.ItemTemplate>
                                                    <DataTemplate>
                                                        <StackPanel Margin="2" Orientation="Horizontal">
                                                            <TextBlock Margin="2" Text="{Binding CountryId}" Style="{StaticResource ContentTextStyle}" />
                                                            <TextBlock Margin="2" Text="{Binding CountryName}" Style="{StaticResource ContentTextStyle}" />
                                                        </StackPanel>
                                                    </DataTemplate>
                                                </ComboBox.ItemTemplate>
                                            </ComboBox>
                                        </DataTemplate>
                                    </data:DataGridTemplateColumn.CellTemplate>
                                </data:DataGridTemplateColumn>
    Le code <ComboBox Width="70" Height="35" ... mis en dessous de la grille fonctionne et permet le choix d'un pays.

    J'ai du mettre en commentaire
    Binding="{Binding RevCountry}"
    car la propriété binding n'existe pas pour DataGridTemplateColumn.

  4. #4
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Tu es sur que ton binding:


    ItemsSource="{Binding Data, ElementName=CountryDS}"


    Fonctionne ? On dirait du WCF RIA Services donc n'oublie pas que tant que la requête n'est pas exécuté, il n'y a pas de résultats visibles.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    C'est effectivement du Ria services défini comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     <riaControls:DomainDataSource x:Name="CountryDS" QueryName="GetCountryTblsQuery" AutoLoad="True"  >
                <riaControls:DomainDataSource.DomainContext>
                    <MonProjetWeb:my_Context/>
                </riaControls:DomainDataSource.DomainContext>
            </riaControls:DomainDataSource>
    et le code suivant, quand je le mets en dehors de mon datagrid, affiche bien les pays:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     <ComboBox x:Name="cboCountrie" Width="250" Height="35"  ItemsSource="{Binding Data, ElementName=CountryDS}" >
                            <ComboBox.ItemTemplate>
                                <DataTemplate>
                                    <StackPanel Margin="2" Orientation="Horizontal">
                                        <TextBlock Margin="2" Text="{Binding CountryId}" Style="{StaticResource ContentTextStyle}" />
                                        <TextBlock Margin="2" Text="{Binding CountryName}" Style="{StaticResource ContentTextStyle}" />
                                    </StackPanel>
                                </DataTemplate>
                            </ComboBox.ItemTemplate>
                        </ComboBox>

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    J'ai réuni dans le même stackpanel deux mêmes combobox. Ils on le même itemSource. Le premier est en dehors d'un datagrid, le second est dedans.

    Quand je clique sur le premier, il me propose la liste des différents pays.

    Le second ne propose rien !!!

    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
    <StackPanel  >
     
                <!-- Ce combo fonctionne-->
                <ComboBox DisplayMemberPath="CountryName" ItemsSource="{Binding DomainContext.CountryTbls, ElementName=CountryDS}" />
     
     
     
                <data:DataGrid x:Name="GrilleResellers" ItemsSource="{Binding Data, ElementName=ResellerDS}" AutoGenerateColumns="False" >
                    <data:DataGrid.Columns>
                        <data:DataGridTextColumn  Header="Town" Binding="{Binding RevTown}" Visibility="Visible" IsReadOnly="False" Width="80" />
                        <data:DataGridTemplateColumn Header="Country" Width="160">
                            <data:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <!-- Ce combo ne fonctionne pas (et pourtant c'est le même)-->
                                    <ComboBox DisplayMemberPath="CountryName" ItemsSource="{Binding DomainContext.CountryTbls, ElementName=CountryDS}" />
                                </DataTemplate>
                            </data:DataGridTemplateColumn.CellTemplate>
     
                        </data:DataGridTemplateColumn>
                    </data:DataGrid.Columns>
                </data:DataGrid>
            </StackPanel>
    Pourquoi ?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Pour vous aider ... à m'aider, une petite info supplémentaire.

    J'ai mis un eventHandler KeyDown sur les deux combo pour pouvoir examiner ce que vaut le sender dans les deux cas:

    Pour le premier, celui qui fonctionne, l'ItemSource vaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {System.Windows.Ria.Data.EntityList( OF MonProjet.Web.MaTable}

    Pour le second, qui n'affiche rien dans son content panel, l'ItemSource vaut:
    !!!!


    Comment faire pour lui mettre un itemSource ?

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Bonjour,

    Après avoir tenté en vain de faire un binding de mon combo contenu dans le datagrid directement dans le XAML, je me suis dit que j'allais mettre l'itemsSource à jour sur l'événement Load de mon combo dans le code behind.

    L'idée était bonne, surtout depuis que j'ai compris (Merci Skyounet ) que l'itemsSource devait être défini pour chaque ligne de mon datagrid.

    Vous trouverez donc la résolution dans le post suivant http://www.developpez.net/forums/d84...n-code-behind/

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

Discussions similaires

  1. Mettre une ComboBox dans un TListView
    Par abdenour-nab dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/10/2008, 23h44
  2. Mettre un tableau dans une DataGrid
    Par Fred677 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 06/07/2007, 12h02
  3. mettre un DropdownList dans un datagrid
    Par MayOL69bg dans le forum ASP.NET
    Réponses: 3
    Dernier message: 17/03/2007, 22h27
  4. [VB.NET] ajouter combobox dans un datagrid
    Par HULK dans le forum Windows Forms
    Réponses: 6
    Dernier message: 27/10/2005, 14h30

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