【问题标题】:Why wont my column sort in a winforms .NET datagrid?为什么我的列不能在 winforms .NET 数据网格中排序?
【发布时间】:2010-12-12 23:30:26
【问题描述】:

我有一个 WinForms .NET 数据网格,其数据源是 List<cLineItem>,称为行。 cLineItem 是一个非常简单的类,具有单位(int)、描述(字符串)和单位数量(浮点数)等属性。

在代码中,我填充行列表,然后设置数据源:

dataGridView1.DataSource = lines;

这会正确填充网格,但是,即使网格中的每一列都设置为可排序,当您单击列标题时,它也不会对行进行排序。

【问题讨论】:

  • 一个快速而肮脏的解决方案是将简单的List<cLineItem> 填充到简单的DataTable 中并将其绑定到DataGridView。

标签: winforms list datagrid sorting columnheader


【解决方案1】:

在 DataGridView doesn't work by default 中排序,除非您的源明确支持排序。您需要将数据源包装在 SortableBindingList 中。您可以使用 zip file 中的文件 PropertyComparer.cs 和 SortableBindingList.cs 并像这样使用它:

dataGridView1.DataSource = new SortableBindingList<cLineItem>(lines);

【讨论】:

  • 并确保您没有将 SortMode 设置为“Programmatic”,除非您想实现自定义排序,默认为“Automatic”。 msdn.microsoft.com/en-us/library/…
  • 当前行列表在设置数据网格的源之前不久通过键入:lines = lines.OrderBy(u => u.units).OrderBy(d => d.description).ToList ();因此,我假设源明确支持排序?谢谢
  • 您的数据是否最初来自数据库?如果是这样,您应该能够删除 .ToList() 然后排序将按预期工作。你也可能想要“lines.OrderBy(u => u.units).ThenBy(d => d.description).ToList();”因为否则第一个 OrderBy 将无效。
  • 使用 SortableBindingList 有效。它之前不起作用的原因是因为我在设计时为数据网格选择了一个数据源,而 Visual Studio 已经为该网格自动创建了一个 BindingList 对象来绑定。因此,当我删除 Visual Studio 的自动创建的 BindingList 对象(并将网格上的设计时数据源设置为(无))并在实例化 SortableBindingList 对象后在运行时绑定网格的数据源时,效果很好:)谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 2012-07-31
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
相关资源
最近更新 更多