2009-12-29 64 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时,它将重新对当前页面上的数据进行排序。

请注意,当发生更改时,本地重新排序将不允许项目移入或移出当前页面。