2013-05-31 81 views
3

我有我自己的DataGrid組件(繼承自DataGrid)。我希望這個組件像MS Access網格一樣工作。我需要的是對數據進行排序,當我調用該方法MySort()(MyDataGrid.MySort)wpf DataGrid - 僅命令排序

MySort方法使用DataGrid項集合,所以我加SortDescriptionItemsView Sorts。問題是我不想在添加或編輯項目時重新排列此網格。排序可能只能通過MySort方法調用。

如何防止DataGrid排序當Items.SortDescription有一些值?我需要一些物業,如do_not_resort

回答

3

如果您使用.Net Framework 4或更高版本,則可以使用網格控件的「CanUserSortColumns」屬性來防止自動排序。

您的自定義網格的MySort方法可以大致看起來像這樣。

public void MySort(DataGridSortingEventArgs args) 
    { 
     //create a collection view for the datasource binded with grid 
     ICollectionView dataView = CollectionViewSource.GetDefaultView(this.ItemsSource); 
     //clear the existing sort order 
     dataView.SortDescriptions.Clear(); 

     ListSortDirection sortDirection = args.Column.SortDirection ?? ListSortDirection.Ascending; 
     //create a new sort order for the sorting that is done lastly 
     dataView.SortDescriptions.Add(new SortDescription(args.Column.SortMemberPath, sortDirection)); 

     //refresh the view which in turn refresh the grid 
     dataView.Refresh(); 
    } 
+0

Kumar Veluswam Thank You4快速回答,但我認爲這不能解決我的問題。那是我自己做的。 我要去利用例子來說明你的關鍵問題: 數據網格顯示值:數據網格是可編輯的,所以我變更值3〜7 .....,然後將數據網格勝地(因爲SortDescriptions有列名)。當我添加或修改項目時,我不希望它自動進行。只能通過MySort方法完成度假。 – tomatino

+1

CollectionViewSource自動排序。你是否試過綁定一個通用列表而不是CollectionViewSource,因爲它可以更好地控制排序?你是否按多列排序? –