You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms DataGridView单元格未即时更新问题求最优解决方案

解决DataGridView编辑后直接点击按钮不更新的问题

这个问题的核心原因很明确:当你还处于单元格编辑状态时直接点击按钮列,DataGridView不会自动结束当前的编辑流程,导致你修改的新值还没提交到绑定的DataTable里,后续操作拿到的还是旧值,UI自然也不会即时刷新显示新内容。

不需要逐个设置CurrentCell这种繁琐的操作,最简单高效的解决方案是在CellClick事件的最开头强制结束所有编辑状态,这样就能确保所有未提交的修改都被同步到数据源,UI也会自动更新。

修改你的CellClick事件代码:

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{
    // 先强制结束所有正在进行的编辑,确保修改值提交到数据源
    dgv.EndEdit(DataGridViewDataErrorContexts.Commit);

    // Button on grid
    if (e.ColumnIndex == 17) 
    {
        string val1 = dgv.Rows[e.RowIndex].Cells[3].Value.ToString();
        string val2 = dgv.Rows[e.RowIndex].Cells[5].Value.ToString();

        Task.Factory.StartNew<Dictionary<string, Response>>(() => GenerateData(val1, val2))
            .ContinueWith(ant => 
            {
                int rowId = Convert.ToInt32(this.dgv.Rows[e.RowIndex].Cells[1].Value);
                SetResponse(rowId, this.DataSet.DataTable, ant.Result);
                // 现在不需要逐个设置CurrentCell了,EndEdit已经搞定了值的提交和UI更新
            }, TaskScheduler.FromCurrentSynchronizationContext());
    }
}

额外说明:

  • EndEdit(DataGridViewDataErrorContexts.Commit)会触发DataGridView完成当前单元格的编辑流程,把修改后的值同步到绑定的DataTable,同时自动刷新UI显示新值,一步到位解决你遇到的问题。
  • 如果你想从根源上减少这类问题,还可以检查DataGridView的EditMode属性,比如设置为EditOnEnter或者EditOnKeystrokeOrF2,让编辑状态的触发更符合你的操作习惯,但上面的EndEdit方法是最可靠的兜底方案,不管编辑模式是什么都能生效。

内容的提问来源于stack exchange,提问作者JoeyDiaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:08:04