告诉 DataGridView 停止排序的正确方法是什么?
我有一个“屏幕”,我在其中以编程方式告诉网格按第 4 列和升序排序。当我切换到另一个区域时,我希望相同的网格进入“默认”/无排序。我正在删除所有列并添加新列。排序保留在第 4 列。
我看不到使用 Sort() 方法的方法。有任何想法吗?
告诉 DataGridView 停止排序的正确方法是什么?
我有一个“屏幕”,我在其中以编程方式告诉网格按第 4 列和升序排序。当我切换到另一个区域时,我希望相同的网格进入“默认”/无排序。我正在删除所有列并添加新列。排序保留在第 4 列。
我看不到使用 Sort() 方法的方法。有任何想法吗?
我已经直接访问了 BindingSource 上的排序:
((BindingSource)_dgv.DataSource).Sort = string.Empty;
From MSN Forums:
The DataGridView is bound to a DataView and not the Table directly, so you need to set:
DataTable.DefaultView.Sort = String.Empty
Effectively clearing the sorting on the table and thereby the grid that is bound to it. This appears to require a Refresh of the DataGridView, unless you are using 2005, and then you can use a separate binding manager.
在与 user2268720 的答案相同的域中.. 不是最干净的解决方案,但使用未绑定的 DGV 为我完成了这项工作:
if (dgv.SortedColumn != null) {
DataGridViewColumn col = dgv.SortedColumn;
col.SortMode = DataGridViewColumnSortMode.NotSortable;
col.SortMode = DataGridViewColumnSortMode.Automatic;
}
不是直接的答案,但“未分类”当然没有很好的定义。您不能对(隐藏)列进行排序,例如 ID 吗?
尝试将网格的 itemsource 设置为 Nothing,然后再次将其设置回表的 DefaultView
我今天也遇到了这个问题。我有一个定期DataGridView
换掉它的DataSource
(a )。DataTable
当用户使用以下代码单击列标题时,我终于能够删除用户指定的排序:
If dgv.SortedColumn IsNot Nothing AndAlso dgv.DataSource IsNot Nothing Then
Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
dt_Sender.DefaultView.Sort = dt_Sender.Columns(0).ColumnName & " ASC"
End If
这个功能是因为我有一个隐藏列,DataGridView
它始终位于列索引位置 0。它是一个整数主键,用于在数据加载时对基础数据进行排序。
DataTable
*如果您还没有(例如,dt_Sender.Columns(0).ColumnName = "colIndex"
) ,您可能必须在 中命名您的索引列。
*如果您使用一个对象作为您和您BindingSource
之间的中介(正如许多人似乎所做的那样),那么您必须将您适当地嵌套在第二行中(即,将更改为:)。DataGridView
DataTable
DirectCast
Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)
Dim dt_Sender As DataTable = DirectCast(DirectCast(dgv.DataSource, BindingSource), DataTable)
*此外,如果您DataTable
碰巧由没有整数主键(可能是 GUID?)的 SQL Server 查询填充,那么您可以更改其源查询以包含新的行号,然后将新列隐藏在你的DataGridView
. 例如:
SELECT Row_Number() OVER (ORDER BY (SELECT '')) AS RowNumber, Column1, Column2, Column3
FROM SourceTable
希望这个解决方案在未来对其他人有所帮助。
/// C#
/// Author : Jeudi Prando
foreach (DataGridViewColumn column in this.DataGridView1.Columns)
{
column.SortMode = DataGridViewColumnSortMode.NotSortable;
column.SortMode = DataGridViewColumnSortMode.Automatic;
}