如果像这样的网格
Name Age
Raj 20
Biny 19
Raj 17
Jose 27
Jose 15
现在点击Name Grid Column Means
我想要输出如下
Name Age
Biny 19
Jose 15
Jose 27
Raj 17
Raj 20
See above table sort Based on Name column
如: - 现在jose年龄也有点像15,27
我正在使用下面的代码,但它无法正常工作 private void dataGridView1_ColumnHeaderMouseClick(object sender,DataGridViewCellMouseEventArgs e)
{ var sortGlyph = dataGridView1.Columns [“Name”] .HeaderCell.SortGlyphDirection;
switch (sortGlyph)
{
case SortOrder.None:
case SortOrder.Ascending:
dataGridView1.Sort(dataGridView1.Columns["Name"], ListSortDirection.Descending);
dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection = SortOrder.Descending;
break;
case SortOrder.Descending:
dataGridView1.Sort(dataGridView1.Columns["Name"], ListSortDirection.Ascending);
dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
break;
}
}
以下代码是对上述问题的回答
switch (sortGlyph)
{
case SortOrder.None:
case SortOrder.Ascending:
dt.DefaultView.Sort = "Name,Age";
dt = dt.DefaultView.ToTable();
dataGridView1.DataSource = dt;
dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection =SortOrder.Descending;
break;
case SortOrder.Descending:
dt.DefaultView.Sort = "Name,Age";
dt = dt.DefaultView.ToTable();
dataGridView1.DataSource = dt;
dataGridView1.Columns["Name"].HeaderCell.SortGlyphDirection = SortOrder.Ascending;
break;
}
答案 0 :(得分:1)
如果您要求与分页一起进行此操作,那么就没有简单且可扩展的解决方案。事实上,这是商业应用程序Web开发的一个圣杯。例如,请参阅StackOverflow问题Dynamic Sorting within SQL Stored Procedures,它涉及同样的事情。毕竟,如果我们在数据库服务器上进行动态排序,我们只需要编写用于管理用户排序选择的机制。
对于多列排序,您实际上只有三个选项:
在客户端中执行此操作,让您的数据容器执行繁重的工作(当您使用内置此功能的数据容器时,例如[System.Data.DataView
] [2])
编写自己的算法并在绑定前自行对数据进行排序。
通过上述链接中讨论的解决方案之一在数据库服务器上执行此操作。
这两种客户端解决方案都不具备可扩展性,因为它们涉及在您可能只需要一个子集时提取和提供所有数据。
答案 1 :(得分:0)