2012-04-12 4 views
2

두 테이블로 구성된 데이터 세트가 있는데, 간단한 일대 다 많은 부모 자식 관계가 진행됩니다. 예 : 내가 부모 ID 필드에 부모와 자식 사이에 설정된 관계 (ParentChildRelation를) 가지고이 데이터 집합에서 wpf 데이터 격자에있는 데이터 세트에서 관련 데이터를 표시하는 방법

Parent Table 
ParentId (int) 
Name  (string) 

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

. 그리고 만약 내가 programtically Parent.getChildRows() 호출을하면 나는 관계가 좋다는 것을 알기 위해 정확한 관련 자식 레코드를 볼 수있다.

부모 행 목록이있는 데이터 격자를 표시하고 선택한 부모에 대한 하위 레코드 목록을 표시하는 별도의 별도의 DataGrid가 필요합니다.

지금까지 내가 또한 윈도우 생성자의 예에서 자체 창에 대한 데이터 컨텍스트를 설정

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"] ; 
     } 
    } 

이 뒤에 코드에서 내 창;

this.DataContext = this; 

내 XAML 내가 dataGrid2에 표시하는 자식 기록을 얻을 수 그러나

<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> 

에서

.

이 격자를 datarelation 이름에 바인딩하는 것이 맞습니까?

내 창에서 다른 속성에 바인딩하면;

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

그러면 부모님과 관계없이 모든 기록을 볼 수 있습니다.

아무도 내게 줄 수있는 포인터를 주셔서 감사합니다.

답변

1

DataView를 반환하면 작동하지만 모두 표시됩니다. 여기

당신은

ItemsSource="{Binding Path=ParentChildRelation}" 

당신은 DataView를

DataRowView.CreateChildView 방법 (하여 DataRelation을)

+0

그리고 왜 이것이 투표를 거절 했습니까? – Paparazzi

+0

왜 downvoted되었는지 또는 누가 정보를 주셔서 감사하지만 CreateChildView 메서드를 호출하는 대신 xaml을 통해 자식 뷰에 직접 바인딩 할 수있는 방법이 없는지 확인 하시겠습니까? –

+0

물음표가 보입니다. 질문 있니? 작동 했나요? – Paparazzi

1

I을 생산하는 DataView를

사용을의 관계를 반환 할 필요하여 DataRelation을 반환하는 받아 들인 대답을 해결할 수 없습니다. 내 상황은 여기에 설명 된 것과 동일합니다 : 2 개의 테이블, 관계, 2 개의 DataGrid.

CreateChildView 메서드를 살펴 봤지만 어딘가에 핵심 지점이 없습니다. childview을 얻기 위해 내 현재 코드 :

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

문제는 첫째로 나는 분명히 내가 항상 parenttable의 첫 번째 행의 childview을 얻을 의미 지수가 고정이 두 배입니다. 둘째, 부모 뷰에서 새 행을 선택하면 새 자식 뷰를 가져 오는 데 비참하게 실패합니다. ChildView는 초기화시에만 호출됩니다.

내 XAML은 :

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

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

나는 이것을 XAML 솔루션을하고 childview를 업데이트 쓰기 eventhandlers를 방지하고 싶습니다. 나는 DataContext로 놀아 보려고했지만 아무데도 가지지 않았다. 데이터 셋과 관계로이 구조를 활용하는 방법에 대한 문서는 정말 슬림하다. (내가 올바른 방향으로 가고 있는지 궁금하게 만든다.)

+0

안녕하세요, 저기! 나는이 질문을 별도의 질문으로 게시하고이 해결책이 효과가 없었던 이유를 언급하는 것이 가장 좋을 것이라고 생각합니다. 아마도 이미 해결 된 질문에 대한 답변으로 게시하는 것보다 도움이 될 것입니다. 건배! –

관련 문제