C# 当组合框所选索引更改时刷新Windows窗体DataGridView

C# 当组合框所选索引更改时刷新Windows窗体DataGridView,c#,.net,winforms,.net-4.0,datagridview,C#,.net,Winforms,.net 4.0,Datagridview,我有一个WindowsFormsDataGridView,它显示一个班级注册学生的列表。DataGridView中的组合框列显示学生可以移动到的替代类列表 如果用户使用组合框选择不同的类,然后在DataGridView中选择不同的行,则刚编辑的行将从DataGridView中删除,这是正确的,因为它不再满足条件 我的问题是,当用户从组合框中选择新值时,我需要这样做,而不必等待用户选择另一行。原因是,如果在用户选择另一行之前未删除该行,则这些行将上移以填补删除的行留下的间隙,从而使当前选定的行成为

我有一个WindowsFormsDataGridView,它显示一个班级注册学生的列表。DataGridView中的组合框列显示学生可以移动到的替代类列表

如果用户使用组合框选择不同的类,然后在DataGridView中选择不同的行,则刚编辑的行将从DataGridView中删除,这是正确的,因为它不再满足条件

我的问题是,当用户从组合框中选择新值时,我需要这样做,而不必等待用户选择另一行。原因是,如果在用户选择另一行之前未删除该行,则这些行将上移以填补删除的行留下的间隙,从而使当前选定的行成为用户选定行下方的行,这可能会让用户感到困惑

我已尝试调用DataGridView的刷新方法,但在用户选择另一行之前,编辑的行仍不会被删除。

请尝试myGrid.EndEdit;组合后,选定的索引更改以将更改发布到网格

您可能还需要更改当前单元格以强制更新:

DataGridViewCell currentCell = myGrid.CurrentCell;
try {             
    myGrid.EndEdit();
    myGrid.CurrentCell = null;
    myGrid.CurrentCell = currentCell;
}
catch {
    myGrid.CurrentCell = currentCell;
    myGrid.CurrentCell.Selected = true; 
}

最终解决了以下问题:我没有直接使用过滤后的DataView作为DataGridView的数据源,而是使用DataView.ToTable方法获取一个只包含过滤后的记录的DataTable,并将其用作DataGridView的数据源。由于DataGridView不再绑定到筛选的DataView,因此当选择更改时,更改的行不再从DataGridView中删除。当用户单击“保存”按钮时,我将DataTable合并回原始数据集中,保存更改,然后再次调用DataView.ToTable方法,并将DataGridView重新绑定到DataTable以删除更改的记录。感谢我的同事Michael的建议,谢谢Michael。

谢谢,但不是:DataGridViewCell currentCell=this.ClassMembershipDataGrid.currentCell;this.ClassMembershipDataGrid.EndEdit//抛出异常:操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用//this.ClassMembershipDataGrid.CurrentCell=null;this.ClassMembershipDataGrid.CurrentCell=CurrentCell;this.ClassMembershipDataGrid.Refresh;仍在寻找解决方案。如果我不能立即删除不再符合条件的行,在用户更改选择之前,我很乐意在用户单击“保存”按钮之前将其删除。此时您只获得14个视图。您可以通过更好的标记获得更多。这是c还是VB.NET?您的目标是哪个.NET Framework版本?谢谢。我添加了.net-4.0标记,尽管我没有理由认为这是特定于版本的。我现在暂缓添加C标记,因为我不认为问题是语言特定的,我非常乐意使用VB.NET获得建议。