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

C# 动态修改时未更新Datagridview单元格值,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,根据设计要求,用户不能直接编辑datagridview。它处于只读模式。当用户双击单元格时,datagridview的只读属性变为false,单元格接受键盘输入。但是,原始键盘输入在进入单元格之前需要格式化。因此,我截取按键事件如下: private void dgw_keyPress(object sender, KeyPressEventArgs e) { e.Handled = true; } 此时,单元格处于编辑模式和脏模式。然后,我用另一种方法更新Value属性,并调用

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

private void dgw_keyPress(object sender, KeyPressEventArgs e)
 {
     e.Handled = true;
 }
此时,单元格处于编辑模式和脏模式。然后,我用另一种方法更新Value属性,并调用
dgw.Refresh()
,它应该在单元格上显示更新后的值。但不会。仅当当前单元格未变脏且未处于编辑模式时,它才会更新。当单元格仍处于编辑模式时,如何强制单元格显示更新的值


有什么想法吗?

您可以通过实现该接口来做到这一点。我认为这是获得对单元格如何进入和离开编辑模式的最大控制的方法。您可以在Mark Rideout的Try方法的第5.11节中找到更多详细信息

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


使用下面的命令刷新当前单元格的值,更改以适合您的EditingControl类型

if (dgvMain.EditingControl is TextBox)
{
    dgvMain.EditingControl.Text = dgvMain.CurrentCell.Value.ToString();
}
另一种方法:

调用此方法以强制单元格在编辑中更新其显示值 模式这在外部进程修改单元格值时非常有用 并且您希望将更改通知用户,即使 因此,用户指定的更改将丢失


我用下面的代码解决了这个问题

GrdBudgetTabOver.EndEdit()
这就行了,

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

不太清楚要实现什么,如何捕获
按键
事件,然后修改输入并将其分配给网格。请发布所有相关代码,这并不能说明问题的起因。我在datagridview控件上尝试了InvalidateCell()UpdateCellValue()和Refresh(),但没有成功。我正在拦截并忽略控件的关键事件。相反,我有一个记录击键的键盘挂钩。我获取键盘钩子捕获的关键事件,修改值并将它们显示在DGW单元格上。谢谢你的建议,但这没有帮助。我想出了一个解决办法。将焦点移出编辑的单元格会自动刷新其中的数据。然后我立刻把焦点放回那个单元格,这是一个很好的解决方案。有一个非常小的闪烁,这是唯一的问题。谢谢你的回答。虽然答案是3岁。它帮助我走向命运。
dgv.EndEdit()
dgv.InvalidateCell(ColIdx, RowIdx)