当ComboBox选择的索引发生更改时,刷新Windows窗体DataGridView

时间:2012-12-05 14:24:03

标签: c# .net winforms .net-4.0 datagridview

我有一个Windows窗体DataGridView,它显示了在课程中注册的学生列表。 DataGridView中的组合框列显示可以移动学生的备用类列表。

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

我的问题是当用户从组合框中选择新值而不等待用户选择另一行时,我需要这样做。原因是如果在用户选择另一行之前未删除该行,则行向上移动以填充已删除行所留下的间隙,使当前选定的行位于用户选择的行下方,可能会造成混淆用户。

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

2 个答案:

答案 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以删除更改的记录。感谢我的同事迈克尔的建议,感谢迈克尔。