编辑单元格后自动对DataGridView进行排序
本文关键字:DataGridView 排序 单元格 编辑 | 更新日期: 2023-09-27 18:22:31
我有一个简单的、未绑定的DataGridView。在编辑任何单元格后,我希望特定列自动排序。当CellEndEdit
事件被激发时,我试图调用dataGridView1.Sort
,但我得到了一个InvalidOperationException,消息为操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用
知道我如何使列自动排序吗?
您不必在CellEndEdit
事件处理程序中调用dataGridView1.Sort()
,编辑单元格后,列将自动为您排序。您只需要指定要排序的列以及排序一次的顺序(升序或降序),例如在表单构造函数中:
//This will sort ascendingly the first column
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
然后,每次用户编辑完第一列中的单元格时,该列都会自动排序。
更新
如果DataGridView
不是数据绑定的,我尝试将上面的代码行放在CellEndEdit
事件处理程序中,它运行正常。我不确定为什么它不适用于您?
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == 0)//Just care the first column
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
}
加载事件放入:
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
对于UPDATE,您需要使用以下两个事件:
private void dataGridView1_RowLeave(object sender, DataGridViewCellEventArgs e)
{
dataGridView1.EndEdit();
}
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == 0)//Just care the first column
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
}
以下是我在单元格结束编辑后对网格进行排序的解决方案,并避免出现"操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用"异常。
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if(e.ColumnIndex == 0)//Just care the first column
this.BeginInvoke(new MethodInvoker(DoSortGrid));
}
private void DoSortGrid(){
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView.CurrentRow.Index;//Keep the current row in view for large list
}
告诉绑定源进行排序并指定要排序的列。示例:
this.table1BindingSource.Sort = "person";