1

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

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

我的问题是,当用户从组合框中选择新值时,我需要发生这种情况,而无需等待用户选择另一行。原因是,如果在用户选择另一行之前未删除该行,则这些行会向上移动以填补被删除行留下的空白,使当前选择的行低于用户选择的行,这可能会造成混淆用户。

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

4

2 回答 2

0

myGrid.EndEdit();在组合选择的索引更改后尝试将更改发布到网格。

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

DataGridViewCell currentCell = myGrid.CurrentCell;
try {             
    myGrid.EndEdit();
    myGrid.CurrentCell = null;
    myGrid.CurrentCell = currentCell;
}
catch {
    myGrid.CurrentCell = currentCell;
    myGrid.CurrentCell.Selected = true; 
}
于 2012-12-05T14:30:16.843 回答
0

最终解决了这个问题:我没有直接使用过滤后的 DataView 作为 DataGridView 的 DataSource,而是使用 DataView.ToTable() 方法获取一个仅包含过滤记录的 DataTable,并将其用作 DataGridView 的 DataSource。As the DataGridView is no longer bound to the filtered DataView, the changed rows are no longer removed from the DataGridView when the selection changes. 当用户单击“保存”按钮时,我将 DataTable 合并回原始 DataSet,保存更改,然后再次调用 DataView.ToTable() 方法并将 DataGridView 重新绑定到 DataTable 以删除更改的记录。感谢我的同事迈克尔的建议,感谢迈克尔。

于 2012-12-13T15:05:36.463 回答