【发布时间】:2009-11-30 20:39:18
【问题描述】:
我希望能够按 ComboBoxColumn 对 DataGridView 进行排序,以便可以根据 ComboBoxColumn 中的值显示组。当我单击 ComboBoxColumn 时,DataGridView 没有响应,不像其他列是 TextBoxColumns。意思是,当我单击列标题时它不会排序。
如何提供此功能,还是必须用我自己的自定义类覆盖列的功能?
【问题讨论】:
标签: c# datagridview
我希望能够按 ComboBoxColumn 对 DataGridView 进行排序,以便可以根据 ComboBoxColumn 中的值显示组。当我单击 ComboBoxColumn 时,DataGridView 没有响应,不像其他列是 TextBoxColumns。意思是,当我单击列标题时它不会排序。
如何提供此功能,还是必须用我自己的自定义类覆盖列的功能?
【问题讨论】:
标签: c# datagridview
我只是很快地对此进行了原型设计,向表单添加了一个未绑定的 DataGridView,然后添加了四列、两个文本框列和两个组合框列。
整个代码隐藏如下所示:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
DataGridViewComboBoxColumn col = (DataGridViewComboBoxColumn) dataGridView1.Columns[1];
DataGridViewComboBoxColumn col2 = (DataGridViewComboBoxColumn)dataGridView1.Columns[2];
List<string> items = new List<string>(){"B", "C", "E", "A"};
col.DataSource = items;
col.SortMode = DataGridViewColumnSortMode.Automatic;
col2.DataSource = items;
col2.SortMode = DataGridViewColumnSortMode.Automatic;
dataGridView1.Rows.Add(new string[] {"A", "B", "C", "D"});
dataGridView1.Rows.Add(new string[] { "B", "C", "C", "F" });
dataGridView1.Rows.Add(new string[] { "C", "B", "A", "A" });
}
}
在这个非常简单的示例中,排序对我来说非常有效。
您可能需要发布代码示例以缩小代码中的差异。
我能想到的一种可能是我绑定到一个字符串列表,而不是对象。
根据documentation,您还可以为 SortCompare 事件提供您自己的自定义处理程序。
【讨论】:
我按 ComboBox 文本的值而不是 ID 对 DataGridViewComboBoxColumn 进行排序,对我的 ComboBox 中的记录进行排序。我修改了 ComboBox 的源以按 SQL 中显示的值 (ORDER BY [value_displayed] ASC/DESC) 对记录进行排序。这意味着记录的 ID 与值的顺序相同。
例如:
未排序的组合框:1:费尔南多,2:亚历克斯,3:查理
排序的组合框:1:Alex,2:Charlie,3:Fernando
这意味着,即使 DataGridView 列排序是基于 ID 排序,文本值的顺序也相同,因此列排序是正确的。
【讨论】: