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

WinForm C# 如何为动态创建的DataGridView控件绑定事件方法

解决步骤

1. 修正事件处理方法的签名

.NET 控件的事件处理程序需要符合标准委托签名,必须包含**触发事件的控件实例(sender)和事件参数(e)**两个参数,同时建议不要用Action作为方法名(和.NET内置委托重名容易引发歧义),修改后的代码如下:

private void OnDataGridViewCellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
    // 如果需要获取当前触发事件的DataGridView实例,可通过sender转换
    DataGridView currentDgv = sender as DataGridView;
    // 原有业务逻辑
    if(e.RowIndex == 2)
    {
        MessageBox.Show("Hello");
    }
}

2. 在动态创建控件的逻辑中添加事件绑定

在初始化panGridView的代码末尾,直接添加事件订阅即可,修改后的Example方法如下:

public void Example(TabControl tab)
{
    // 注意原代码的循环边界有问题:原写法i<tab.TabCount,每次循环TabCount会自增会导致死循环,这里替换为你实际需要创建的标签页数量即可
    for(int i=0; i < 预期创建的标签页数量; i++)
    {
        tab.TabPages.Add("Panneau " + tab.TabCount);
        
        DataGridView panGridView = new DataGridView();
        panGridView.Name = "panGridView_" + tab.TabCount;
        panGridView.Location = new System.Drawing.Point(0, 0);
        panGridView.RowTemplate.Height = 24;
        panGridView.Size = new System.Drawing.Size(1375, 458);
        panGridView.Columns.Add("id", "id");
        panGridView.Columns.Add("part_code", "part_code");
        panGridView.Columns[0].Width = 100;
        panGridView.Columns[1].Width = 150;
        panGridView.Visible = true;
        panIndex.Items.Add(tab.TabCount - 1);
        tab.TabPages[tab.TabCount - 1].Controls.Add(panGridView);

        // 新增事件绑定代码
        panGridView.CellMouseClick += OnDataGridViewCellMouseClick;
    }
}

扩展说明

  • 如果需要绑定其他事件(比如单元格双击、行添加、单元格值变更等),只需替换对应事件名,同时调整事件处理方法的第二个参数的类型即可,比如绑定CellValueChanged事件就把处理方法的第二个参数改为DataGridViewCellEventArgs。
  • 所有动态生成的DataGridView会共用同一个事件处理方法,通过sender参数即可区分不同的控件实例,实现差异化逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:36:00