【问题标题】:Sorting DataGridView by Column.DisplayMember按 Column.DisplayMember 对 DataGridView 进行排序
【发布时间】:2012-05-10 08:11:46
【问题描述】:

我有一个 DataGridView 和几个 DataGridViewComboBoxColumn,其中实际值与 ID 相关联,但 DisplayMember 是查找表中的字符串对应项。我试图做到这一点,所以当我按该列排序时,排序是基于DisplayMember,而不是ValueMember。我知道this question 已经解决了这个问题,但答案不够深入,我也不明白。

到目前为止我已经尝试过什么

  • 绑定到SortCompare 事件,但发现它没有在数据绑定列上触发。
  • ColumnHeaderMouseClick 事件上手动排序,但 DataGridViewRowCollection 中的行是只读的,我无法以编程方式在数据绑定集合中插入行(在交换时)。
  • 创建一个隐藏的DataGridViewTextBoxColumn,其中单元格自动设置为原始列的DisplayMember,然后尝试对该列进行排序。但是,数据绑定集合无法根据无限制列进行排序。

编辑:进一步澄清:我正在尝试根据组合框的DisplayMember 对整个DataGridView 进行排序,而不是对组合框本身进行排序。

如何根据数据绑定DataGridViewComboBoxColumnDisplayMemberDataGridView 进行排序?

【问题讨论】:

  • 查询表本身的时候可以排序吗?喜欢让 sql 做你的工作吗?
  • 也许吧?我知道我必须使用的 SQL 语句,但我不确定如何直接在 DataGridView 上调用 SQL。
  • 你没有将你的 dgv 与数据表绑定吗?在那种情况下,您如何填充数据表?我猜你是从底层数据库获取值,不是吗?
  • 如果我说得不清楚,我很抱歉。是的,DataGridView 绑定到数据表,然后组合框使用第一个 ID 绑定到查找表。但我已经自动设置了,我没有以编程方式绑定它们。
  • 哦,我错过了您正在寻找组合框排序而不是 gdv 行的观点。在那种情况下,您如何获得查找表?是不是不能对查找表进行排序?

标签: c# .net winforms sorting datagridview


【解决方案1】:

您的第三次尝试几乎是正确的:您需要在 DataSet 中创建一个额外的列来存储 DisplayMember 的值。然后,创建一个不可见的绑定 DataGridViewColumn,并将其绑定到这个额外的 DataSet 列。然后它是一个绑定列,您可以以编程方式对其进行排序。

您链接到的问题也在做同样的事情,只是该解决方案是在 SQL 中生成显示成员文本,然后再将其返回给应用程序。

你会认为这很简单,不是吗? :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多