动态修改时,Datagridview单元格值未更新

时间:2011-05-11 04:42:31

标签: c# .net winforms datagridview

根据设计要求,用户无法直接编辑datagridview。它处于只读模式。当用户双击单元格时,datagridview的只读属性变为false,单元格接受键盘输入。但是,原始键盘输入需要在进入单元格之前进行格式化。所以,我按如下方式拦截了KeyPress事件:

private void dgw_keyPress(object sender, KeyPressEventArgs e)
 {
     e.Handled = true;
 }

此时,单元格处于编辑模式和脏模式。然后我用另一种方法更新Value属性并调用dgw.Refresh(),它应该在单元格上显示更新的值。但事实并非如此。它只会在当前单元格不脏并且不处于编辑模式时更新。如何在单元格仍处于编辑模式时强制显示更新后的值?

有什么想法吗?

5 个答案:

答案 0 :(得分:11)

使用以下内容刷新当前单元格的值,更改为适合您的EditingControl类型

if (dgvMain.EditingControl is TextBox)
{
    dgvMain.EditingControl.Text = dgvMain.CurrentCell.Value.ToString();
}

另一种方法:

  

调用此方法强制单元格在编辑时更新其显示值   模式。当外部进程修改单元格值时,这很有用   并且您希望通知用户该更改,即使是在   结果,用户指定的更改将丢失。details

dgvMain.RefreshEdit();

答案 1 :(得分:0)

您可以通过实施IDataGridViewEditingControl界面来实现这一目标。我认为这是控制细胞如何进入和离开编辑模式的最佳方式。您可以在Mark Rideout DataGridView FAQ (DOC)

的第5.11节中找到更多详细信息

答案 2 :(得分:0)

尝试DataGridView.EndEdit方法。

  

提交并结束当前单元格的编辑操作。

答案 3 :(得分:0)

我用下面的代码解决了。

GrdBudgetTabOver.EndEdit()

答案 4 :(得分:0)

这将起作用,

dgv.EndEdit()
dgv.InvalidateCell(ColIdx, RowIdx)