2012-04-12 10 views
2

Ich habe ein Dataset mit zwei Tabellen, eine einfache zu viele Eltern Kind Beziehung geht. z.B;So zeigen Sie verwandte Daten aus Dataset in wpf datagrid

Parent Table 
ParentId (int) 
Name  (string) 

Child Table 
ChildId (int) 
ParentId (int) 
Name  (string) 

In diesem Datensatz ich eine Beziehung haben (ParentChildRelation) zwischen dem Elternteil und Kind auf der übergeordneten ID-Feld aufgebaut. Und wenn ich programmatisch einen Aufruf von Parent.getChildRows() mache, sehe ich die korrekten zugehörigen untergeordneten Datensätze, also weiß ich, dass die Beziehung gut ist.

Ich muss ein Datagrid mit einer Liste der übergeordneten Zeilen anzeigen und ein anderes separates Datagrid anzeigen die Liste der unterordneten Datensätze für das ausgewählte Eltern anzeigen.

Bisher auf meinem Fenster in Code hinter ich habe

private DataSet _parentChildDataSet; 
public DataSet ParentChildDataSet 
{ 
    get 
    { 
     return _parentChildDataSet; 
    } 
    set 
    { 
     _parentChildDataSet = value; 
    } 


    public DataView ParentView 
    { 
     get 
     { 
      return this.ParentChildDataSet.Tables["Parent"].DefaultView; 
     } 
    } 

    public DataRelation ParentChildRelation 
    { 
     get 
     { 
      return this.ParentChildDataSet.Relations["Parent_Child"] ; 
     } 
    } 

ich auch die Datacontext für das Fenster sich in dem Windows-Konstruktor zB festgelegt;

this.DataContext = this; 

und in meiner XAML

<Grid> 
    <DataGrid ItemsSource="{Binding Path=ParentView}" AutoGenerateColumns="True" Name="dataGrid1"> 
    </DataGrid> 
    <DataGrid ItemsSource="{Binding Path=ParentChildRelation}" Name="dataGrid2" AutoGenerateColumns="False"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Path=Name}" Header="Name" /> 
     </DataGrid.Columns> 
    </DataGrid> 
</Grid> 

Jedoch habe ich keine untergeordneten Datensätze erhalten können in DataGrid2 zu zeigen.

Ich verbinde dieses Gitter mit dem Datenrelationsnamen ist das korrekt?

wenn ich an eine andere Eigenschaft auf meinem Fenster binde;

public DataView ChildrenView 
    { 
     get 
     { 
      return this.ParentChildDataSet.Tables["Child"].DefaultView; 
     } 
    } 

dann sehe ich alle Datensätze unabhängig von der übergeordneten wie Sie erwarten würden.

Danke für alle Hinweise, die mir jemand geben kann.

Antwort

1

Wenn Sie ein DataView zurückgeben, funktioniert es, zeigt aber alle an.

Hier kehren Sie eine Datarelation

ItemsSource="{Binding Path=ParentChildRelation}" 

Sie benötigen ein Dataview

Verwenden Beziehung zurückzukehren, um die Dataview

DataRowView.CreateChildView Methode (Datarelation)

+0

Und warum genau wurde das abgelehnt? – Paparazzi

+0

Ich bin mir nicht sicher, warum es downvooted wurde oder von wem, danke für die Informationen, aber gibt es keine Möglichkeit, direkt über xaml an die untergeordnete Ansicht zu binden, anstatt die CreateChildView-Methode aufzurufen? –

+0

Ich sehe ein Fragezeichen. Gibt es eine Frage? Hat es funktioniert? – Paparazzi

1

I zu produzieren Ich bin nicht in der Lage, die akzeptierte Antwort auszuarbeiten. Meine Situation ist identisch mit der hier beschriebenen: 2 Tabellen, Beziehung, 2 Datagrids.

Ich habe in der CreateChildView-Methode nachgeschaut, aber mir fehlt irgendwo ein Schlüsselpunkt. Mein aktueller Code für das Erhalten des childview:

public DataView ChildView { 
    get { 
     return ParentChildRelation.ParentTable.DefaultView[0].CreateChildView("regels") 
    } 
} 

Das Problem ist zweifach, zunächst offenbar ich habe den Index festgelegt, was bedeuten, habe ich immer den childview der ersten Reihe des Parent bekommen. Zweitens versage ich kläglich beim Abrufen einer neuen Kindansicht, wenn eine neue Zeile in der Elternansicht ausgewählt wird (ChildView wird nur bei der Initialisierung aufgerufen).

Meine XAML:

<Grid> 
    <DataGrid 
     ItemsSource="{Binding Path=ParentView}" 
     AutoGenerateColumns="True" 
     Name="dataGrid1" 
    /> 

    <DataGrid 
     ItemsSource="{Binding Path=ChildView}" 
     AutoGenerateColumns="True" 
     Name="dataGrid2" 
    /> 
</Grid> 

Ich möchte diese eine XAML-Lösung machen und Schreiben Eventhandler zu vermeiden, dass die childview aktualisieren. Ich habe versucht, mit DataContext herumzuspielen, kam aber nirgendwohin. Die Dokumentation, wie man diese Struktur mit Datasets und Relationen nutzen kann, ist sehr gering (ich frage mich, ob ich den richtigen Weg eingeschlagen habe).

+0

Hey, da! Ich glaube, es wäre das Beste für Sie, dies als separate Frage zu veröffentlichen und zu erwähnen, warum die Lösung für dieses Problem nicht funktioniert hat. Das wäre wahrscheinlich hilfreicher, als es als Antwort auf eine bereits gelöste Frage zu veröffentlichen, wo es nicht so wahrgenommen wird. Prost! –

Verwandte Themen