保存Silverlight DataGrid排序

时间:2009-08-12 18:52:24

标签: sorting datagrid silverlight-2.0

我有一个Silverlight 2.0 DataGrid,其中包含需要在一个时间间隔内刷新的项目列表,以显示最新信息。此网格中的某些项目可能会被添加,并且可能会在向当前用户显示屏幕时将其删除。例如:

如果网格如下所示,那么一分钟后数据需要刷新,因为另一个用户添加了第四个条目。 (注意排序按姓氏排序)

  

Data Grid http://img16.imageshack.us/img16/1667/datagrid.jpg

然后,当我获取新数据集并将其设置为datagrid的DataSource属性时,它会根据我的第一列来调度数组,如下所示:

  

Data Grid2 http://img19.imageshack.us/img19/1294/datagridb.jpg

有没有办法在数据源更新后重新应用排序?我想保存数据网格按姓氏排序,然后更新数据源,然后将排序重新应用到数据网格的事实。因此,最终数据网格将如下所示:

  

Data Grid3 http://img13.imageshack.us/img13/4636/datagrid2.jpg

这些屏幕截图当然不是Silverlight数据网格,但这是为了简单解释这种情况。

3 个答案:

答案 0 :(得分:0)

可能最好的方法是使用PagedCollectionViews,虽然我自己没有测试过,但这些类包含一个属性,用于存储应用于它们的不同排序方法。我相信您可以从一个集合中获取当前的排序元素,连接到新集合,并将排序应用于新集合。

如需更深入地讨论这一切是如何运作的,您可以按照here

的说明进行操作

答案 1 :(得分:0)

我尝试使用PagedCollectionViews以及CollectionViewSources(我使用新集合来覆盖现有的源集合)。

我的解决方案不是最优雅的,但它确实有效。在更新DataGrid的源代码时,我进行了自己的更改检测。

换句话说,我不是盲目地覆盖源集合,而是遍历新集合,将每个项目与现有集合进行比较,并在可能的情况下更新现有项目。

希望有所帮助。

答案 2 :(得分:0)

在研究了如何做到这一点之后,我已经弄明白了。我试图实现其他人所说的尝试,但无法让它在Silverlight 2.0中运行。因此,我搜索了StackOverflow和Google以获得更多答案。 ScottLogicCodeProject似乎正是我所寻求的,但我无法让他们完全工作。所以有点沮丧和玩代码,我终于找到了解决方案。

如果您用于DataGrid的ItemsSource的集合是ObservableCollection(Of T),您可以获得对对象进行排序的功能,此外您还可以在运行时动态更新集合,从而使网格能够刷新你插入的项目。我已经创建了一个Gcode的Google Code项目,供您查看和下载。请注意,我正在使用此项目的Microsoft Silverlight 2.0 DataGrid 2008年12月发行版。我也在项目页面上链接了这个下载。 (所需的dll是从项目内的lib文件夹中引用的。)

享受!


Silverlight 2.0 DataGrid Sort Project on Google Code