10

告诉 DataGridView 停止排序的正确方法是什么?

我有一个“屏幕”,我在其中以编程方式告诉网格按第 4 列和升序排序。当我切换到另一个区域时,我希望相同的网格进入“默认”/无排序。我正在删除所有列并添加新列。排序保留在第 4 列。

我看不到使用 Sort() 方法的方法。有任何想法吗?

4

7 回答 7

8

我已经直接访问了 BindingSource 上的排序:

((BindingSource)_dgv.DataSource).Sort = string.Empty;

于 2009-09-24T19:25:05.780 回答
6

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.

于 2009-09-10T19:01:44.013 回答
1

在与 user2268720 的答案相同的域中.. 不是最干净的解决方案,但使用未绑定的 DGV 为我完成了这项工作:

            if (dgv.SortedColumn != null) {
                DataGridViewColumn col = dgv.SortedColumn;
                col.SortMode = DataGridViewColumnSortMode.NotSortable;
                col.SortMode = DataGridViewColumnSortMode.Automatic;
            }
于 2014-01-27T15:08:12.183 回答
1

不是直接的答案,但“未分类”当然没有很好的定义。您不能对(隐藏)列进行排序,例如 ID 吗?

于 2009-09-09T21:27:16.923 回答
0

尝试将网格的 itemsource 设置为 Nothing,然后再次将其设置回表的 DefaultView

于 2013-08-15T00:33:40.800 回答
0

我今天也遇到了这个问题。我有一个定期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之间的中介(正如许多人似乎所做的那样),那么您必须将您适当地嵌套在第二行中(即,将更改为:)。DataGridViewDataTableDirectCastDim 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

希望这个解决方案在未来对其他人有所帮助。

于 2016-05-10T14:45:42.400 回答
-1
/// C#
/// Author : Jeudi Prando

foreach (DataGridViewColumn column in this.DataGridView1.Columns)
{
    column.SortMode = DataGridViewColumnSortMode.NotSortable;
    column.SortMode = DataGridViewColumnSortMode.Automatic;
}
于 2013-04-11T03:55:17.470 回答