2012-08-16 4 views
1

누군가이 문제에 대한 지침을 제공 할 수 있습니까?WPF DataGrid 정렬 - 데이터가 시각적으로 정렬됩니다. 기본 데이터가 정렬되지 않았습니다.

DataTable에 바인딩 된 DataGrid가 있습니다.

관련 XAML & 코드 :

<DataGrid Name="dataGrid1" IsReadOnly="True" ItemsSource="{Binding}" 
<DataGrid.Columns> 
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" /> 
<DataGridTextColumn Header="Path" Binding="{Binding Path=Path}" /> 
</DataGrid.Columns> 


dataGrid1.DataContext = gridData.dt; // this is a DataTable with 3 columns. 

제 3 회 DT 열이 그리드에 표시되지 않습니다. 이드로 사용됩니다.

데이터 테이블이 첫 번째 열에 정렬되고 내용이 표시됩니다. 사용자는 이름 또는 경로 열/제목 중 하나를 클릭하여 정렬 할 수 있으며 시각적으로 정렬/표시는 잘됩니다. 문제는 특정 행을 선택하여 표의 데이터를 검사 할 때 DataTable의 데이터가 정렬되지 않은 상태로 남아있는 경우입니다.

내 질문에, 사용자가 열 중 하나를 정렬 할 때 그리드의 기본 데이터를 업데이트하는 가장 좋은 방법은 무엇입니까? 이것은 내가 관찰 한 내용입니다

(이 적절한 열을 DataTable의 정렬 필요) :

  1. 이 DataGridColumnHeader에 Click 이벤트 처리기를 추가하면 이벤트가 발생한다. (보낸 사람의) columnHeader.SortDirection 값이 목표 값이 아닌 CURRENT 값이라는 것을 확인했습니다.

즉 내림차순으로>가 오름차순 오름차순 -> 상승 하강 - 널 (null) : 주어진 열 정렬 순서는이 단계를 통과라고하는 것이 정확 현재 상태를 알면 다음 상태를 결정할 수 있습니다.

  1. DataGridColumnHeader의 SortDirection 속성에 오름차순/내림차순/null을 찾는 트리거를 배치 할 수 있지만 그 다음은 무엇입니까? 이 코드를 실행할 수 있습니까? 그렇다면 코드 조각을 보여줄 수 있습니까?

나는 비슷한 포스트를 통과하고 다음을 수행하는 것을 시도했다 :

  • 하나에 내 데이터 그리드를 결합하여 CollectionViewSource 실험. 실험으로 열 머리글 클릭 이벤트를 트랩하고 열에 정렬 순서를 지정했습니다. 이것은 작동하지 않았다. (구현이 잘못되었을 수 있습니다.)

  • XAML에 특정 DataGridTextColumn 항목에 SortedMemberPath = "xx"를 추가했습니다.

매우 도움을 주셨습니다.

답변

1

사용 DataGrid.Sorting 이벤트 :

이벤트 핸들러에서
public class DataGrid : MultiSelector 
{ 
    ... 

    // 
    // Summary: 
    //  Occurs when a column is being sorted. 
    public event DataGridSortingEventHandler Sorting; 

    ... 
} 

, 전자를 사용합니다.열 속성은 데이터를 정렬하는 데 사용 된 열을 알아보십시오 :

void dataGrid1_Sorting(object sender, DataGridSortingEventArgs e) 
{ 
    e.Column ... // TODO 
} 
+0

작업은 DataGridColumnHeader Click 이벤트 다르지 않다. I.E. SortDirection은 BEFORE 값입니다. –

+0

나는 정렬 방향이 위에서 지적한 패턴을 따르고 이에 따라 코딩되었다고 가정했다. 첫 번째 열 (이름)을 내 ID (세 번째 숨겨진 열)에 매핑하고 그에 따라 다시 정렬하는 사전을 추가했습니다. 어쩌면 최선의 방법은 아니지만 잘 작동합니다. –

관련 문제