【问题标题】:Cancel Edit Cell on Double Click DataGridView C# WinForm取消双击 DataGridView C# WinForm 上的编辑单元格
【发布时间】:2018-05-12 07:40:36
【问题描述】:

我在 DataGridView 中有双击事件,如下所示:

private void gridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
    // put something here to cancel the edit

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

当这个双击触发时,它会调用另一个窗体,当这个子窗体关闭时,它会加载网格:

public void callWhenChildClick(List<string> codes)
{
    //some code here
    Grid_Load();
}

我有单元格验证,当这个Grid_Load() 调用时总是触发:

private void gridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    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;
    }
}

如何忽略此单元格仅针对这种情况进行验证Grid_Load()?或者是否有任何功能可以取消编辑并在单元格双击时忽略验证?

【问题讨论】:

  • 您是否尝试在调用 Grid_Load 之前删除 gridView_CellValidating 事件处理程序,然后在完成后将其重置?
  • @JayV :在调用 grid_load 之前删除事件是什么意思?
  • gridView.CellValidating -= gridView_CellValidating 放在调用Grid_Load 之前,然后将gridView.CellValidating += gridView_CellValidating 放在它之后以重置它
  • @JayV :这确实有效,你能把它作为答案吗?谢谢

标签: c# winforms datagridview


【解决方案1】:

如果您需要阻止事件处理程序执行,可以将其暂时从 Object 中移除,然后在您希望它再次运行时重新应用。

要禁用(实际上是删除)事件处理程序,请添加代码:

gridView.CellValidating -= gridView_CellValidating

在这一行之后,您可以运行您想要的任何代码,而不会导致事件处理程序执行。

然后可以通过添加以下行来重置或重新添加事件处理程序:

gridView.CellValidating += gridView_CellValidating

注意:每次您希望像上面那样添加事件处理程序时,您还应该在调用之前加上一个删除操作,以防止事件处理程序执行多次(或超过预期的次数)。如果尚未添加事件处理程序并且您尝试将其删除,则不会有副作用,但是,多次添加相同的事件处理程序会导致事件处理程序执行多次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    相关资源
    最近更新 更多