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 :

Combobox dans datagrid : impossible de mémoriser la nouvelle sélection


Sujet :

Silverlight

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Points : 26
    Points
    26
    Par défaut Combobox dans datagrid : impossible de mémoriser la nouvelle sélection
    Bonjour,

    Je travaille avec Visual Studio 2008 et Silverlight 3 (c# en code behind).
    J'ai besoin d'intégrer des combobox dans un datagrid.
    Ce datagrid est peuplé par une collection (dont les résultats sont tirés d'une vue), il s'alimente correctement.

    Dans mon datagrid, j'ai une colonne de combobox créée dans le XAML.
    Cette colonne est peuplée grâce à une collection différente de celle du datagrid.
    Elle s'alimente correctement mais je n'arrive pas à conserver la valeur sélectionnée lorsque la combobox perd le focus.

    Plus concrètement :
    Au chargement de la cellule, une valeur est affichée dans le Textblock (cf propriété "Text").
    Lorsque l'on sélectionne un élément dans la combobox, j'arrive à récupérer la nouvelle valeur sélectionnée dans une variable (grâce à l'événement "SelectionChanged" de ma combobox)
    Mais je n'arrive pas à mémoriser cette valeur dans la propriété "Text" du Textblock de la cellule.

    Du coup, impossible de mémoriser la nouvelle sélection effectuée.


    Ci-dessous un aperçu de mon code 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
     
           <!--es - Définition de la colonne de COMBOBOX COMPTE TVA: -->
                    <data:DataGridTemplateColumn Header="Compte TVA" Width ="100">
                        <data:DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock x:Name="TeB_CompteTva" Text="{Binding COMPTE_TVA}" Width="100"
                                           VerticalAlignment="Center" HorizontalAlignment="Left"/>
                            </DataTemplate>
                        </data:DataGridTemplateColumn.CellTemplate>
                        <data:DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <ComboBox x:Name="CoB_ComptesTva" Loaded="CoB_ComptesTva_Loaded" 
                                          SelectedItem="{Binding CodeCompteTva, Mode=TwoWay}"
                                          DisplayMemberPath="CodeCompteTva" Width="100"
                                          VerticalAlignment="Center" HorizontalAlignment="Left"
                                          SelectionChanged="CoB_ComptesTva_SelectionChanged"/>
                            </DataTemplate>
                        </data:DataGridTemplateColumn.CellEditingTemplate>
                    </data:DataGridTemplateColumn>
    Précisions sur le code : l'ItemSource de la combobox est effectué dans le code behind.
    "CodeCompteTva" correspond à une propriété de la collection qui alimente l'ItemSource.

    J'ai essayé de "binder" de plusieurs façons la propriété "Text" du Textblock mais le résultat ne fonctionne pas ou ne correspond pas à ce que je veux.
    Et je n'arrive pas à "attaquer" le Textblock depuis le code behind.

    Que me conseillez-vous ?


    Cordialement,

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Ben quand tu changes ta combobox ta propriété CodeCompteTva est aussi mise à jour non ?

    Si tu veux que ton TextBlock soit lui aussi mis à jour dans le set de CodeCompteTva fait un NotifyPropertyChanged de COMPTE_TVA.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Bonjour Skyounet,

    Merci pour ta réponse.
    J'ai ajouté un NotifyPropertyChanged dans le set de CodeCompteTva comme tu le suggères en me basant sur l'exemple de ce lien :

    http://msdn.microsoft.com/fr-fr/libr...8VS.95%29.aspx

    Mais PropertyChanged reste à null. Une idée ?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Est-ce que tu as bien implémenté INotifyPropertyChanged ? Rajouter l'event ne fait rien en soit, il faut implémenter l'interface.

    Une fois que tu as fait (ou si c'est déjà fait) et que ça ne fonctionne pas, postes le code de ta classe.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 44
    Points : 26
    Points
    26
    Par défaut
    Oui j'ai bien implémenté INotifyPropertyChanged.
    Face à ce problème persistant de PropertyChanged à nul j'ai repris mon code point par point et me suis rendu compte que la façon dont j'alimentais mon datagrid ne correspondait pas avec ce que j'essayais de faire.

    Pour résumé en gros mon problème : le datagrid était alimenté par une collection comportant les résultats directement issus de la bdd.
    J'ai donc résolu le souci en parcourant cette collection de résultat élément par élément et en créant une liste d'objets de ma classe principale.

    Au final : le datagrid est chargé correctement, les combobox conservent bien la nouvelle valeur sélectionnée et PropertyChanged fonctionne.

    Ce problème est donc résolu.
    Merci Skyounet.

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

Discussions similaires

  1. Combobox dans TabItem : impossible d'initialiser Combobox.SelectedIndex
    Par adaneels dans le forum Windows Presentation Foundation
    Réponses: 27
    Dernier message: 14/04/2009, 10h58
  2. Réponses: 19
    Dernier message: 09/04/2008, 17h05
  3. Combobox dans datagrid et liaison
    Par Plantadonf dans le forum VB.NET
    Réponses: 4
    Dernier message: 09/03/2007, 15h33
  4. ComboBox dans DataGrid
    Par the big ben 5 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2005, 15h47

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