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 :

problème de datarelation et binding


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Par défaut problème de datarelation et binding
    Bonjour à tous,

    Je viens vers vous car je bloque depuis plusieurs semaines sur la création d'une vue maitre/détail. Petit à petit j'avance grâce à des tuto ou message du forum. Mais là je reste bloqué... Sur quelque chose de simple pour beaucoup d'entre vous, mais moi je suis un grand débutant

    Je souhaite réaliser une relation entre deux table (un à plusieurs et réaliser une vue maitre détail) la même chose que sur ce poste:
    http://www.developpez.net/forums/d85...tail-datagrid/

    Mais ça ne marche pas chez moi. je pense que mon code behind est incomplet...
    Je précise que j'ai créé mon dataset et ma relation par le biais de l'assistant et que mon premier datagrid se remplit parfaitement, ensuite le deuxième à les bons intitulés de colonne, mais il reste vide...

    code xaml du deuxième datagrid
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <dg:DataGrid  IsSynchronizedWithCurrentItem="True"  ItemsSource="{Binding Path=TABLE_CLIENT/RELATION_TABLE_CLIENT_TABLE_COMMANDE}" AutoGenerateColumns="True" Grid.Column="2" Margin="18,201,6,10" Name="dataGrid2" />

    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
    Private Sub TabGestion_Chantier_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles TabGestion_Chantier.Loaded
     
            'Instanciation du DataSet qui va servir à travailler sur les données
            BaseDataSet = New baseDataSet()
     
            'Lecture des données dans la base de données
            Dim BaseTableAdapter = New baseDataSetTableAdapters.TABLE_CHANTIERTableAdapter()
     
            'Extraction des données et chargement du DataSet
            BaseTableAdapter.Fill(BaseDataSet.TABLE_CLIENT)
     
            DataContext = BaseDataSet
     
        End Sub
    un coup de main serait vraiement sympa!

  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,

    Il faudrait plus de code pour t'aider à débugger mais vérifie ces points :
    • IsSynchronizedWithCurrentItem="True" est-il bien mis sur tes DEUX grilles ?
    • Partagent-elles bien le même datacontext ?


    J'espère que cela t'aidera !

    Jonathan ANTOINE
    http://blog.lexique-du-net.com (anglais)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Par défaut
    Merci de ta réponse!

    Oui j'ai bien mis IsSynchronizedWithCurrentItem="True" sur les deux grilles

    En revanche j'ai un doute sur le datacontext. J'ai défini le datacontext en faisant référence à la table client seule(j'ai suivi un tuto de ce site pour faire cela) et je pense que ça pêche à ce niveau... de plus le code behind que j'ai, est exécuter au chargement de la fenêtre principal....

    code xmal épuré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Grid>
     
                        <dg:DataGrid    IsSynchronizedWithCurrentItem="True" 
                                        ItemsSource="{Binding TABLE_CLIENT, Mode=Default}" 
                                        Name="dataGrid1" />
     
                         <dg:DataGrid  IsSynchronizedWithCurrentItem="True" 
                                       ItemsSource="{Binding Path=TABLE_CLIENT/RELATION_TABLE_CLIENT_TABLE_COMMANDE}" 
                                       Name="dataGrid2" 
                                       VerticalAlignment="Bottom" />
                    </Grid>
    le code behind a été entièrement cité plus haut

    encore merci de ton aide!

  4. #4
    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
    Bonsoir,
    1. Est-ce que tu as un message d'erreur dans la fenêtre d'output ?
    2. Est-ce que tu es sur que RELATION_TABLE_CLIENT_TABLE_COMMANDE correspond bien au nom de la relation ?


    En espérant que cela va faire avancer le schmilbik !


    Jonathan ANTOINE
    http://blog.lexique-du-net.com (anglais)

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Par défaut
    Dans la fenêtre d'exécution de Microsoft Visual Express 2008 j'ai effectivement des erreurs que je n'avais pas vu

    du genre:

    System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='Microsoft.Windows.Controls.DataGrid', AncestorLevel='1''. BindingExpressionath=HeadersVisibility; DataItem=null; target element is 'DataGridRowHeader' (Name=''); target property is 'Visibility' (type 'Visibility')
    ou bien(cité plusieurs fois pour l'ensemble des champs de la table enfant):

    System.Windows.Data Error: 39 : BindingExpression path error: 'Articles' property not found on 'object' ''Object' (HashCode=10377481)'. BindingExpressionath=Article; DataItem='Object' (HashCode=10377481); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
    quant à ma relation, je l'ai créer à l'aide de l'assistant et elle porte bien ce nom...

    Merci pour tes réponses, en tant que débutant ça me fait avancé!

  6. #6
    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
    Re,

    Je n'ai jamais utilisé les dataset encore mais est-ce que tu ne devrais pas le remplir avec la relation aussi dans ton code behind ?


    Ce post semble expliquer comment résoudre ton problème : http://www.developpez.net/forums/d66...s/#post3900378

    Et il y a aussi cette page mSDN : http://msdn.microsoft.com/en-us/library/aa480226.aspx

    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
    DataSet theSet = new DataSet();
     
    string connString = ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString;
    string employeeQuery = @"
      SELECT EmployeeID, FirstName, LastName, Title, HireDate, Photo 
      FROM Employees
    ";
    string orderQuery = @"
      SELECT o.OrderID, EmployeeID, CompanyName, OrderDate, SUM((UnitPrice * Quantity)* (1-Discount)) as OrderTotal
      FROM Orders o
      JOIN [Order Details] od on o.OrderID = od.OrderID
       JOIN Customers c on c.CustomerID = o.CustomerID
      GROUP BY o.OrderID, o.EmployeeID, o.OrderDate, CompanyName";
     
    // Fill the Set with the data
    using (SqlConnection conn = new SqlConnection(connString))
    {
      SqlDataAdapter da = new SqlDataAdapter(employeeQuery, conn);
      da.Fill(theSet, "Employees");
      da.SelectCommand.CommandText = orderQuery;
      da.Fill(theSet, "Orders");
    }
     
    // Create the relationship
    DataTable empTable = theSet.Tables["Employees"];
    DataTable ordTable = theSet.Tables["Orders"];
    theSet.Relations.Add("Emp2Ord", 
                         empTable.Columns["EmployeeID"], 
                         ordTable.Columns["EmployeeID"], 
                         false);

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

Discussions similaires

  1. Problème transfert de zone BIND
    Par tech_77 dans le forum Réseau
    Réponses: 5
    Dernier message: 04/08/2010, 13h44
  2. Problème transfert de zone BIND
    Par tech_77 dans le forum Réseau
    Réponses: 0
    Dernier message: 29/07/2010, 13h41
  3. Problème définition d'un Binding
    Par jacquesprogram dans le forum Windows Presentation Foundation
    Réponses: 63
    Dernier message: 03/10/2009, 23h22
  4. [WPF]Problème d'update de binding
    Par guitoux1 dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 12/06/2007, 17h42
  5. problème de récursivité avec .bind
    Par polo42 dans le forum Tkinter
    Réponses: 2
    Dernier message: 30/04/2007, 18h52

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