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

如何通过循环批量填充WinForm中的多个DataGridView控件

批量填充WinForm中多个DataGridView的解决方案

这问题我平时做WinForm项目时经常碰到,单独写重复代码确实麻烦,给你分享两种高效的批量处理方案,完美解决动态指定控件的问题:

方案一:通过控件名称动态查找(适合控件命名有规律的场景)

如果你的DataGridView命名是dgvfurnace6、dgvfurnace5...dgvfurnace1这种有规律的格式,直接用Controls.Find方法就能在循环里定位到每个控件。

代码示例:

// 假设你的数据表也是对应命名的,比如ChargeInfo6到ChargeInfo1
for (int i = 1; i <= 6; i++)
{
    // 构造当前循环对应的控件名
    string dgvName = $"dgvfurnace{i}";
    // 在窗体控件集合中查找指定名称的控件,第二个参数true表示递归查找子控件
    var dgv = this.Controls.Find(dgvName, true).FirstOrDefault() as DataGridView;
    
    // 确保找到控件后再进行绑定操作,避免空引用异常
    if (dgv != null)
    {
        // 这里替换成你对应的数据表获取逻辑,比如根据i获取ChargeInfo{i}
        var dataTable = GetChargeInfoTable(i); // 假设这是你的数据获取方法
        dgv.DataSource = dataTable;
        dgv.AutoGenerateColumns = true; // 根据需求设置是否自动生成列
    }
}

关键点说明:

  • Controls.Find会返回匹配名称的控件数组,用FirstOrDefault()取第一个匹配项(确保你的控件名称唯一)
  • 第二个参数true要根据你的控件布局来设置:如果DataGridView直接放在窗体上,设为false也可以;如果放在Panel、GroupBox等容器里,必须设为true才能递归找到子控件

方案二:提前将控件存入集合(更直观,适合控件数量固定的场景)

如果不想依赖控件名称,或者担心命名出错,可以先把所有需要操作的DataGridView放到一个集合里,直接循环集合即可。

代码示例:

// 初始化包含所有目标DataGridView的集合
var dgvList = new List<DataGridView>
{
    dgvfurnace1,
    dgvfurnace2,
    dgvfurnace3,
    dgvfurnace4,
    dgvfurnace5,
    dgvfurnace6
};

// 循环集合绑定数据,这里假设数据表顺序和集合顺序对应
for (int i = 0; i < dgvList.Count; i++)
{
    var dgv = dgvList[i];
    // 根据索引获取对应的数据表,比如i从0到5对应ChargeInfo1到ChargeInfo6
    var dataTable = GetChargeInfoTable(i + 1);
    dgv.DataSource = dataTable;
}

优势:

  • 代码可读性更高,一眼就能看到要操作的所有控件
  • 不需要依赖控件命名规则,就算后续控件改名,只要更新集合里的引用就行

额外提示

如果你的数据表命名也有规律(比如ChargeInfo1到ChargeInfo6),可以在循环里动态构造数据表名称,或者用一个数据表数组来对应,进一步简化代码。另外,记得在绑定数据前可以先清空旧数据,避免出现残留内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:05:01