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 :

[WPF] Databinding sur 2 combox


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Par défaut [WPF] Databinding sur 2 combox
    Bonjour à tous !

    J'ai un problème de databinding dans mon application WPF.

    Pour résumer, mon application se connecte à une base de données Oracle dont les tables qui m'intéressent sont :
    - LIAISON_INF (LIAISON, ...)
    - CHAUSSEE_INF (LIAISON_INF__LIAISON, SENS, ...)

    LIAISON est donc clé primaire de LIAISON_INF et devient clé étrangère dans CHAUSSEE_INF. Dans cette table, la clé primaire est (LIAISON_INF__LIAISON, SENS).


    LIAISON représente des autoroutes (par exemple A1, A6...) et SENS, le sens sur lequel on travaille (de 1 à 4). Mais toutes les liaisons n'ont pas 4 sens, donc je voudrais récupérer les sens qui correspondent à la liaison choisie.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DataSet dt = Database.ExecSelect("select DISTINCT LIAISON from LIAISON_INF", "LIAISON_INF");
    dt = Database.AddToDataset("select LIAISON_INF__LIAISON, SENS from CHAUSSEE_INF", "CHAUSSEE_INF", dt);
     
    DataColumn colLiaison = dt.Tables["LIAISON_INF"].Columns["LIAISON"];
    DataColumn colChaussee = dt.Tables["CHAUSSEE_INF"].Columns["LIAISON_INF__LIAISON"];
     
    DataRelation relation = new DataRelation("LiaisonToChaussee", colLiaison, colChaussee);
    dt.Relations.Add(relation);
     
    lstLiaison.DataContext = dt.Tables["LIAISON_INF"].DefaultView;
     
    //  FONTIONNE MAIS RENVOIE TOUTES LES VALEURS DE 'SENS'
    lstSens2.DataContext = dt.Tables["CHAUSSEE_INF"].DefaultView;

    Je remplis mon DataSet, j'affiche tous les noms des liaisons dans ma combobox (lstLiaison) , jusque là pas de problème.
    Pour afficher la liste des sens correspondants par contre ça coince... J'ai trouvé un début de solution expliquant qu'il faut utiliser une DataRelation, mais l'exemple était en Windows Form et ça n'a pas l'air de fonctionner exactement de la même façon en WPF...

    Et faudrait pas que j'oublie mon XAML quand même...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="648,12,0,0" Name="lstLiaison" VerticalAlignment="Top" Width="120"  
          ItemsSource="{Binding}" 
          DisplayMemberPath="LIAISON"
          IsSynchronizedWithCurrentItem="True" />
     
    <ComboBox Height="23" HorizontalAlignment="Left" Margin="392,30,0,0" Name="lstSens2" VerticalAlignment="Top" Width="120" 
          ItemsSource="{Binding}" 
          DisplayMemberPath="SENS"
          IsSynchronizedWithCurrentItem="True" />
    Vous allez me dire "tu crées une relation mais tu ne l'utilises pas...", mais j'ai essayé de l'utiliser sans résultat convaincant...

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Par défaut
    La solution que j'ai trouvé

    Code XAML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            <ComboBox Height="23" Margin="0,12,210,0" Name="lstLiaison" VerticalAlignment="Top" 
                      ItemsSource="{Binding}" 
                      DisplayMemberPath="LIAISON"
                      IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" Width="120" />
     
            <ComboBox Height="23" Margin="0,41,210,0" Name="lstSens" VerticalAlignment="Top"
                      ItemsSource="{Binding LiaisonToChaussee}" 
                      DisplayMemberPath="SENS"
                      IsSynchronizedWithCurrentItem="True" HorizontalAlignment="Left" Width="120" />

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                    DataSet dt = Database.ExecSelect("select DISTINCT LIAISON from LIAISON_INF", "LIAISON_INF");
                    dt = Database.AddToDataset("select LIAISON_INF__LIAISON, SENS from CHAUSSEE_INF", "CHAUSSEE_INF", dt);
                    //dt = Database.AddToDataset("select * from CHAUSSEE_INF", "CHAUSSEE_INF", dt);
     
                    DataColumn colLiaison = dt.Tables["LIAISON_INF"].Columns["LIAISON"];
                    DataColumn colChaussee = dt.Tables["CHAUSSEE_INF"].Columns["LIAISON_INF__LIAISON"];
     
                    DataRelation relation = new DataRelation("LiaisonToChaussee", colLiaison, colChaussee);
                    dt.Relations.Add(relation);
     
                    DataContext = dt.Tables["LIAISON_INF"];

  3. #3
    Invité
    Invité(e)
    Par défaut
    Félicitation que tu ait résolu ton problème sauf que ça sens pas le MVVM vu ton code-behind.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Par défaut
    Citation Envoyé par h2s84 Voir le message
    Félicitation que tu ait résolu ton problème sauf que ça sens pas le MVVM vu ton code-behind.
    Model-View-View Model ? Pour être franc, je n'ai pas très bien saisi le principe...

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Citation Envoyé par MiniCesc
    Model-View-View Model ? Pour être franc, je n'ai pas très bien saisi le principe...
    Le MVVM est un pattern très approprié lorsque l'on développe une application avec WPF pour de multiples raisons (dont quelques unes comme simplifier le code behind des vues et ainsi rendre plus aisé la collaboration avec un designer, rendre l'application plus facilement testable, ...).

    Lors de développement de petites applications, suivre ce pattern est loin d'être une indispensable (quand tu apprends les bases de WPF non plus d'ailleurs). Si tu commences à développer des applications plutôt importantes, il faudra y jeter un coup d'œil

    Une petite recherche sur internet te mènera vers pas mal d'articles et tutoriel.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Par défaut
    L'application risque d'être assez importante mais ne sera pas tournée vers le graphisme. C'est une application professionnelle destinée à afficher un certain nombre de données et puis nous n'avons pas de designers dans notre équipe de développement...

    Et puis je ne vois pas vraiment comment récupérer des données d'une base de données avec seulement du code XAML sans code behind... Et l'application ne devra d'ailleurs pas dépendre du type de BDD utilisée.

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

Discussions similaires

  1. [.NET35][WPF][DataBinding]Lier plusieurs combos sur la même source
    Par Excelsior82 dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 28/02/2011, 12h13
  2. databinding sur combobox
    Par Mathieu.Nanoux dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/06/2007, 17h57
  3. [c# CF2.0 VS pro] databinding sur des controles differents
    Par pdesoil dans le forum Windows Forms
    Réponses: 6
    Dernier message: 21/05/2007, 13h41
  4. [WPF] databinding et tri
    Par MrCyprom dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 14/05/2007, 14h16
  5. databinding sur contrôle invisible
    Par xawax34 dans le forum VB.NET
    Réponses: 4
    Dernier message: 03/03/2007, 14h39

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