C#:自定义排序的 DataGridView

标签 c# sorting datagridview dataview

我需要使用自然排序(就像在资源管理器中一样)对 DataGridView 进行排序,以便数字和文本(在同一列中)自然排序,而不是按字母顺序排序(以便“第 3 位”出现在“第 20 位”之前,等等) .).我有一个 DataGridView,我已将 DataView 设置为 DataSource。 DataView 包含一个 DataTable,它是用数据库中的一些值创建的。列类型是字符串。我有一个 IComparer,它可以做它应该做的事,但我不知道如何使用它,因为我不知道如何进行排序。 DataGridView.SortCompare 事件(完美)不起作用,因为它是数据绑定(bind)的。 DataView.Sort,只接受带有列名和排序顺序的字符串。

非常烦人。试图在 StackOverflow 上阅读相关问题,并在谷歌上搜索了很多,但我真的找不到太多相关信息。只有我真正找到的东西是使用数据 View 的 Sort(string) 方法,它不会工作,因为它按字母顺序排序。

有谁知道如何轻松做到这一点?一定是其他人而不是我在为此苦苦挣扎吗?我真的不想重新实现整个 datagridview 或 dataview 类,只是为了获得自定义排序...

更新:如果有人想知道,我仍在寻找这个问题的好答案。虽然与此同时,我最终创建了自己的简单表类,然后手动将其输入到 datagridview 中。重写 SortCompare 方法。有点烦人,但并不太难,因为我只需要显示值(无需编辑或任何东西),因此可以将所有内容转换为字符串。

最佳答案

看看this MSDN pagethis blog post .原则上,您需要在数据源(无论是 ObjectDataSource 还是 SqlDataSource)而不是 GridView 上配置排序。

据我所知,DataView 类只支持简单的升序/降序排序。如果看不到加载和绑定(bind)数据的代码,很难提出具体建议,但您可以:

  1. 将数据加载到 List 而不是 DataTable 中,调用传入比较方法的 Sort 方法,然后绑定(bind)到该列表。
  2. 在您的 aspx 代码中创建一个直接从类中获取数据的 ObjectDataSource,并将该 ObjectDataSource 配置为使用您的 IComparer。

关于C#:自定义排序的 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/435177/

相关文章:

c# - 将 SOAP header 添加到请求

c# - Selenium C# : string contains

python - 按元组的指定元素对带有元组键的字典进行排序

c# - 如何从后台线程正确更新数据绑定(bind) datagridview

C# 等价于 Python 的范围与步骤?

c# - authCookie 在 global.asax 中不安全

arrays - 使用 jq 根据对象中的键值从数组返回整个对象

sorting - Golang Bson在mgo中排序参数

vb.net - 从 DataGridView 选定单元格获取文本

css - 如何在悬停时更改 datagridview 行的颜色?