如何通过循环批量填充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
相关产品推荐
相关产品推荐

