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



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

如果用户使用组合框选择了一个不同的类,然后在DataGridView中选择了另一行,则刚刚编辑的行将从DataGridView删除,因为它不再符合条件。

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

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

在组合选择的索引更改后尝试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的DataSource,而是使用DataView.ToTable()方法来获取一个只包含过滤后的记录的DataTable,并将其用作DataGridView的DataSource。由于DataGridView不再绑定到已筛选的DataView,因此当选择发生更改时,更改的行将不再从DataGridView中删除。当用户单击"保存"按钮时,我将DataTable合并回原始DataSet,保存更改,然后再次调用DataView.ToTable()方法,并将DataGridView重新绑定到DataTable以删除更改的记录。感谢我的同事迈克尔的建议,谢谢迈克尔。

最新更新