告诉DataGridView停止排序的正确方法是什么?
我有一个“屏幕”,我以编程方式告诉网格按第4列排序并按升序排序。 当我切换到另一个区域时,我希望相同的网格进入“默认”/无排序。 我正在删除所有列并添加新列。排序仍在第4栏。
我没有看到使用Sort()方法执行此操作的方法。有什么想法吗?
答案 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
定期交换其DataSource
(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
)。
*此外,如果您的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;
}