2009-12-29 61 views
0

我是Silverlight和RIA的新手。我有一個DataGrid綁定到DomainDataSource對象的簡單表單。顯示的行代表要在網頁上顯示的節標題。其中一列稱爲OrdinalPosition,我已指定網格按此列排序。我有一個帶有向上和向下箭頭按鈕的自定義列。期望的行爲是,當用戶點擊向上/向下按鈕OrdinalPosition遞增/遞減,以便他們可以指定部分出現在什麼順序。Silverlight 4 datagrid不重新排序

如果我手動更改OrdinalPosition列中的值,儘快我離開網格重新排序本身。不過,如果我使用代碼隱藏更改值的網格不會重新排序本身(即使電網不顯示新值。)這裏是我的按鈕點擊代碼隱藏...

private void incrementOrdinal(object sender, System.Windows.RoutedEventArgs e) 
    { 
     Button btn = (Button)sender; 
     Section s = (Section)sectionDataGrid.SelectedItem; 
     s.Ordinal++; 
     sectionDataGrid.CommitEdit(); 
    } 

有我應該做些什麼來提示網格對其記錄進行重新排序?

回答

0

當記錄更改時,DomainDataSource不會自動重新排序數據,除非使用IEditableCollectionView接口通過DomainDataSource通過其Data或DataView公開的數據應用更改。

嘗試類似如下:

IEditableCollectionView view = (IEditableCollectionView)selectionDataGrid.ItemsSource; 
Section s = view.CurrentItem; 
view.EditItem(s); 
s.Ordinal++; 
view.CommitEdit(); 

這是DataGrid中通過UI做編輯的時候進行。 ItemsSource綁定到DomainDataSource.Data屬性,該屬性是DomainDataSourceView類的一個實例,表示已加載的IEnumerable數據。 DomainDataSourceView實現了IEditableCollectionView,並在使用EditItem之後針對該視圖調用CommitEdit時,它將重新對當前頁面上的數據進行排序。

請注意,當發生更改時,本地重新排序將不允許項目移入或移出當前頁面。