【发布时间】:2010-10-09 12:38:00
【问题描述】:
我需要能够从数以万计的可能结果中将结果页面加载到网格中。我想从服务器获取 50 页的数据,使用 SQL Server 在返回数据以绑定到数据网格之前对数据进行排序。当用户通过单击列标题对数据网格中的 dta 进行排序时,我需要检测到这一点并确定新的顺序,然后再返回数据库。
【问题讨论】:
标签: silverlight sorting datagrid
我需要能够从数以万计的可能结果中将结果页面加载到网格中。我想从服务器获取 50 页的数据,使用 SQL Server 在返回数据以绑定到数据网格之前对数据进行排序。当用户通过单击列标题对数据网格中的 dta 进行排序时,我需要检测到这一点并确定新的顺序,然后再返回数据库。
【问题讨论】:
标签: silverlight sorting datagrid
我认为没有办法询问数据网格在哪一列上排序。但是查看http://blogs.msdn.com/scmorris/archive/2008/06/10/sorting-data-in-the-silverlight-datagrid.aspx,我发现当您在项目上实现 ICollectionView 时,您可以实现自己的排序。
所以你也许可以在你的结果上实现 ICollectionView(一个包装器)?
如果您将它的 ItemSource 设置为 IList,Datagrid 会在内部执行此操作,所以也许您可以查看它的实现以了解它们是如何做到的? (参见Datagrids内部类ListCollectionView使用反射器)
当你有一个 ICollectionView 时,你可以使用它的 SortDescriptions 来找出当前的排序。
我希望这可以帮助您朝着正确的方向前进?
吉普克
【讨论】:
您可以使用PagedCollectionView 并将SortDescriptions 属性转换为INotifyCollectionChanged。然后您收听CollectionChanged 事件。像这样:
var collectionView = new PagedCollectionView(items);
(collectionView.SortDescriptions as INotifyCollectionChanged).CollectionChanged += (object sender, NotifyCollectionChangedEventArgs e) =>
{
// This gets fired multiple times based on the previous sort and new sort
};
dataGrid.ItemsSource = collectionView;
【讨论】: