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

C# WinForm:DataGridView双击时取消单元格编辑并跳过验证

解决DataGridView加载时触发CellValidating的问题

针对你遇到的这个问题,有两种比较直接的解决方案,你可以根据自己的业务场景选择:

方案1:用标志位跳过加载时的验证

你可以添加一个布尔字段标记当前是否处于表格加载状态,在CellValidating事件里先检查这个标志,加载过程中直接跳过验证逻辑。

具体步骤:

  1. 在窗体类中添加私有字段:
private bool _isGridLoading = false;
  1. 修改Grid_Load方法,在加载前后设置标志位(用finally确保标志位一定会被重置):
public void Grid_Load()
{
    _isGridLoading = true;
    try
    {
        // 你的表格加载逻辑,比如绑定数据源、刷新数据等
    }
    finally
    {
        _isGridLoading = false;
    }
}
  1. 更新CellValidating事件,先判断标志位再执行验证:
private void gridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    // 如果处于加载状态,直接跳过验证
    if (_isGridLoading)
        return;

    string code = e.FormattedValue.ToString();
    string headerText = gridView.Columns[e.ColumnIndex].HeaderText;
    if (!headerText.Equals("No. Transaksi")) return;
    if (string.IsNullOrEmpty(code))
    {
        MessageBox.Show("No. Transaksi tidak boleh kosong!");
        e.Cancel = true;
    }
}

方案2:双击单元格时先取消编辑状态

另一种思路是在打开子窗体前,先结束DataGridView的当前编辑状态,这样后续重新加载表格时,就不会因为存在未完成的编辑会话而触发验证。

修改你的gridView_CellDoubleClick事件:

private void gridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    // 先结束当前编辑状态,避免后续触发验证
    if (gridView.IsCurrentCellInEditMode)
    {
        gridView.EndEdit();
    }

    dialogContainerForm dialogForm = new dialogContainerForm(username);
    dialogForm.ShowDialog(this);
}

两种方案都能解决你的问题:方案1直接针对加载场景屏蔽验证,方案2从触发源头消除验证触发的条件,你可以根据自己的业务逻辑选择合适的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:27:10