0

我是 Silverlight 和 RIA 的新手。我有一个简单的表单,其中 DataGrid 绑定到 DomainDataSource 对象。显示的行表示要在网页上显示的部分标题。其中一列称为 OrdinalPosition,我已指定网格将按此列排序。我有一个带有向上和向下箭头按钮的自定义列。期望的行为是,当用户单击向上/向下按钮时,OrdinalPosition 会递增/递减,以便他们可以指定部分出现的顺序。

如果我手动更改 OrdinalPosition 列中的值,只要我移出该行,网格就会自行重新排序。但是,如果我使用代码隐藏来更改值,则网格不会自行重新排序(即使网格确实显示了新值。)这是我单击按钮的代码隐藏...

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

我应该做些什么来提示网格重新排序其记录吗?

4

1 回答 1

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 时,它将重新排序当前页面上的数据。

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

于 2010-02-03T07:37:23.983 回答