2012-08-16 56 views
1

有人能夠提供一些指導這個問題:WPF DataGrid排序 - 數據可視化排序。底層數據不排序

我有一個DataGrid綁定到一個DataTable。

相關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. 

第三dT柱未在網格上顯示。它被用作id。

數據表在第一列進行排序並顯示內容。 用戶可以通過點擊它們在名稱或路徑列/標題上進行排序,並且視覺排序顯示正常/顯示正常。問題是,當我通過選擇特定行來檢查網格的數據時,DataTable的數據仍未排序。

我的問題是,在用戶對某列進行排序時更新網格底層數據的最佳方法是什麼? (這需要在適當的列排序數據表)

這是我觀察到:

  1. 添加Click事件處理程序上DataGridColumnHeader不會觸發事件。 我觀察到columnHeader.SortDirection(發件人中)的值是CURRENT值,不是目標值。它是正確的說,給定列 排序順序經歷以下幾個階段: 空 - >升 降 - >升 上升到下降

I.E.通過了解當前狀態,下一個狀態是可確定的。

  1. 我可以在DataGridColumnHeader的SortDirection屬性中尋找升序/降序/ null的觸發器,但然後呢?我可以對此執行代碼嗎? 如果是這樣,你能告訴我一個代碼片段。

我有過類似的帖子了,並試圖執行以下操作:

  • 通過我的DataGrid綁定到一個與CollectionViewSource實驗。作爲一個實驗,我捕獲了列標題單擊事件並強制列上的排序順序。這沒有奏效。 (我的實現可能是錯誤的嗎?)

  • 我將SortedMemberPath =「xx」添加到我的XAML中以指定DataGridTextColumn條目。

任何幫助極大的讚賞。

回答

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值。 – 2012-08-17 20:24:08

+0

我假設排序方向遵循上面指出的模式,並相應地編碼。我添加了一個字典,將第一列(名稱)映射到我的Id(第三個隱藏列)並相應地重新排序。也許不是最好的方法,但它工作正常。 – 2012-08-18 18:22:04