我需要使用自然排序(在资源管理器中)对DataGridView进行排序,以便数字和文本(在同一列中)自然排序,而不是按字母顺序排序(以便"位置3"位于"位置20"之前,等等).我有一个DataGridView,我将DataView设置为DataSource.DataView包含一个DataTable,它是使用数据库中的某些值创建的.列类型是字符串.我有一个IComparer,它做了应有的事情,但我无法弄清楚如何使用它,因为我无法找到如何进行排序.DataGridView.SortCompare事件是完美的,因为它是数据绑定的,所以不起作用.DataView.Sort只接受具有列名和排序顺序的字符串.
很烦人.试图在StackOverflow上阅读相关问题,并搜索谷歌的很多和很多,但我真的找不到这个.只有我真正找到的东西是使用dataview的Sort(字符串)方法,因为它按字母顺序排序.
有没有人知道如何做到这一点没有太多麻烦?它应该是别人而不是我这个?我真的不想重新实现整个datagridview或dataview类,只是为了获得自定义排序...
更新:如果有人想知道,我仍然在寻找这个问题的好答案.虽然与此同时,我最终创建了自己的简单表类,然后手动将其提供给datagridview.覆盖SortCompare方法.有点烦人,但并不太难,因为我只需要显示值(没有编辑或任何东西),因此可以将所有内容转换为字符串.
看看这个MSDN页面和这篇博客文章.原则上,您需要在GridView上配置数据源(无论是ObjectDataSource还是SqlDataSource)的排序.
据我所知,DataView类除了简单的升序/降序排序外不支持任何其他内容.如果没有看到加载和绑定数据的代码,很难做出具体的推荐,但你可以:
将数据加载到List而不是DataTable中,调用Sort方法传递比较方法,然后绑定到该列表.
在您的aspx代码中创建一个ObjectDataSource,直接从类中获取数据,并配置该ObjectDataSource以使用您的IComparer.