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

VB.NET如何根据Datagridview1的勾选值填充另一个Datagridview2

实现方案

触发事件选择

优先使用DataGridView.CellContentClick事件,该事件仅在点击单元格内部内容时触发,完美匹配复选框点击的交互场景,避免了CellClick事件点击单元格空白区域也触发的无效触发问题。
如果不需要勾选后立刻同步,而是点击「确认」按钮后才更新DataGridView2,直接用按钮的Click事件即可。

完整代码示例(C# WinForm)

1. 事件绑定

可直接在窗体设计器中选中DataGridView1,在属性面板的事件列表中双击CellContentClick自动生成绑定,也可以在Form_Load事件中手动添加绑定:

private void Form1_Load(object sender, EventArgs e)
{
    // 此处省略DataGridView1原有数据填充逻辑
    dataGridView1.CellContentClick += DataGridView1_CellContentClick;
}

2. 事件逻辑实现

private void DataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    // 先判断点击的是不是复选框列,此处替换为你自己的复选框列Name
    if (dataGridView1.Columns[e.ColumnIndex].Name != "CheckColumn")
        return;

    // 必须加这行,提交当前单元格的编辑状态,否则刚勾选的状态无法立即读取到
    dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);

    // 筛选所有勾选的行,构造新的数据源
    DataTable dt = new DataTable();
    // 给dt添加和你需要展示在DataGridView2的列,示例:
    dt.Columns.Add("商品名称");
    dt.Columns.Add("单价");
    dt.Columns.Add("库存");

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        // 判断当前行复选框是否被勾选
        bool isChecked = Convert.ToBoolean(row.Cells["CheckColumn"].Value);
        if (isChecked)
        {
            DataRow dr = dt.NewRow();
            // 替换为你实际需要取的字段
            dr["商品名称"] = row.Cells["ProductName"].Value.ToString();
            dr["单价"] = row.Cells["Price"].Value.ToString();
            dr["库存"] = row.Cells["Stock"].Value.ToString();
            dt.Rows.Add(dr);
        }
    }

    // 绑定到DataGridView2
    dataGridView2.DataSource = dt;
}

注意事项

  • 代码中的CheckColumn需替换为你实际设置的复选框列的Name属性值,优先用Name匹配而不是列索引,避免后续新增列后索引错位导致代码失效
  • 数据量较大的场景下,建议直接对DataGridView1的原始数据源做筛选,不用遍历UI行,性能更高
  • 如果不需要实时同步,把遍历筛选的逻辑放到按钮Click事件中即可,不需要绑定CellContentClick事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:36:02