【问题标题】:Datagridview cell value not updated when modified dynamically动态修改时 Datagridview 单元格值未更新
【发布时间】:2011-05-11 04:42:31
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

  • 不太清楚您想要实现什么,您如何捕获keypress 事件,然后修改输入并将其分配给网格。请发布所有相关代码,这并不能说明导致问题的原因。
  • 我在 datagridview 控件上尝试了 InvalidateCell() UpdateCellValue() 和 Refresh(),但没有成功。我拦截并忽略了控件的关键事件。相反,我有一个记录击键的键盘挂钩。我获取键盘钩子捕获的键事件,修改值并将它们显示在 DGW 单元格上。

标签: c# .net winforms datagridview


【解决方案1】:

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

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

另一种方法:

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

dgvMain.RefreshEdit();

【讨论】:

  • 感谢您的回答。虽然答案在 3 岁。它帮助我喜欢到达命运。
  • 请务必检查 EditingControl 是否为空。例如:-
  • if (dgvMain.EditingControl != null) { // 做点什么 }
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    试试DataGridView.EndEdit 方法。

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

    【讨论】:

    • 感谢您的建议,但没有帮助。我想了一个变通办法。将焦点移出已编辑单元格会自动刷新其中的数据。然后我立即将焦点放回那个单元格,这对于现在来说是一个足够好的解决方案。有一点点闪烁,这是唯一的问题。
    【解决方案4】:

    我用下面的代码解决了。

    GrdBudgetTabOver.EndEdit()
    

    【讨论】:

      【解决方案5】:

      这会起作用的,

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        相关资源
        最近更新 更多