.NET / WinForms - 清除DataGridView上的排序

时间:2009-09-09 20:21:17

标签: .net winforms datagridview grid gridview-sorting

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

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

我没有看到使用Sort()方法执行此操作的方法。有什么想法吗?

7 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

来自MSN Forums

DataGridView直接绑定到DataView而不是Table,因此您需要设置:

DataTable.DefaultView.Sort = String.Empty

有效清除表格上的排序,从而清除绑定到它的网格。这似乎需要刷新DataGridView,除非您使用的是2005,然后您可以使用单独的绑定管理器。

答案 2 :(得分:1)

不是直接回答,但当然没有“未分类”的好定义。你不能在(隐藏的)列上排序,比如ID吗?

答案 3 :(得分:1)

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

            if (dgv.SortedColumn != null) {
                DataGridViewColumn col = dgv.SortedColumn;
                col.SortMode = DataGridViewColumnSortMode.NotSortable;
                col.SortMode = DataGridViewColumnSortMode.Automatic;
            }

答案 4 :(得分:0)

尝试将grid itemssource设置为Nothing,然后将其再次设置回表的DefaultView

答案 5 :(得分:0)

我今天也遇到了这个问题。我有一个DataGridView定期交换其DataSourceDataTable)。当用户使用以下代码单击列标题时,我终于可以删除用户指定的排序:

    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对象作为DataGridViewDataTable之间的中间人(正如许多人似乎那样),那么您必须将DirectCast在第二行中适当地Dim dt_Sender As DataTable = DirectCast(dgv.DataSource, DataTable)(即,Dim dt_Sender As DataTable = DirectCast(DirectCast(dgv.DataSource, BindingSource), DataTable)将更改为:DataTable)。

*此外,如果您的DataGridView恰好由没有整数主键(可能是GUID?)的SQL Server查询填充,那么您可以更改其源查询以包含新行号,然后隐藏SELECT Row_Number() OVER (ORDER BY (SELECT '')) AS RowNumber, Column1, Column2, Column3 FROM SourceTable 中的新列。 E.g:

button = new Button(buttonStyle);
    button.setPosition(x, y);
    button.addListener( new ClickListener() {
        @Override
        public void clicked(InputEvent event, float x, float y) {
            Gdx.app.log(TAG, "Button clicked");
        };
    });

希望此解决方案对未来的其他人有所帮助。

答案 6 :(得分:-1)

/// C#
/// Author : Jeudi Prando

foreach (DataGridViewColumn column in this.DataGridView1.Columns)
{
    column.SortMode = DataGridViewColumnSortMode.NotSortable;
    column.SortMode = DataGridViewColumnSortMode.Automatic;
}