我有一个Windows窗体DataGridView,它显示了在课程中注册的学生列表。 DataGridView中的组合框列显示可以移动学生的备用类列表。
如果用户使用组合框选择不同的类,然后在DataGridView中选择另一行,则刚刚编辑的行将从DataGridView中删除 - 正确,因为它不再符合条件。
我的问题是当用户从组合框中选择新值而不等待用户选择另一行时,我需要这样做。原因是如果在用户选择另一行之前未删除该行,则行向上移动以填充已删除行所留下的间隙,使当前选定的行位于用户选择的行下方,可能会造成混淆用户。
我已尝试调用DataGridView的Refresh方法,但在用户选择另一行之前,仍然不会删除已编辑的行。
答案 0 :(得分:0)
在组合选定的索引更改后尝试myGrid.EndEdit();
以将更改发布到网格。
您可能还需要更改当前单元格以强制更新:
DataGridViewCell currentCell = myGrid.CurrentCell;
try {
myGrid.EndEdit();
myGrid.CurrentCell = null;
myGrid.CurrentCell = currentCell;
}
catch {
myGrid.CurrentCell = currentCell;
myGrid.CurrentCell.Selected = true;
}
答案 1 :(得分:0)
结束如下处理:不是直接使用过滤后的DataView作为DataGridView的DataSource,而是使用DataView.ToTable()方法获取仅包含过滤记录的DataTable,并将其用作DataSource的数据源。 DataGridView。由于DataGridView不再绑定到筛选的DataView,因此当选择更改时,不再从DataGridView中删除更改的行。当用户单击“保存”按钮时,我将DataTable合并回原始DataSet,保存更改,然后再次调用DataView.ToTable()方法并将DataGridView重新绑定到DataTable以删除更改的记录。感谢我的同事迈克尔的建议,感谢迈克尔。