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

DataGridView.Rows.Add在for循环中执行效果不同的原因是什么?

问题分析与解决

核心差异:调用的Add重载完全不同

你两段代码看似类似,但实际调用了DataGridViewRowCollection.Add的不同重载,导致行为天差地别:

  1. 第一段代码:

    d.Rows.Add(new DataGridViewCellCollection(c[0].Value.ToString(), c[1].Value.ToString(), c[2].Value.ToString()))
    

    这里传入的是一个DataGridViewCellCollection对象,调用的是**Add(DataGridViewCellCollection cells)重载——作用是新增一行,将这个集合里的三个单元格依次填入该行的对应列**,最终添加1行3列的数据。

  2. 第二段代码:

    for(int i = 0; i < 3; i++) d.Rows.Add(c[i].Value.ToString());
    

    每次循环传入单个字符串,调用的是**Add(object value)重载——这个重载的作用是新增一行,并将传入的值填入该行的第一列**,循环三次会添加3行,每行仅第一列有数据,这就是效果不一致的根本原因。

修正后的循环写法

如果想用循环实现和第一段代码相同的效果,需要先收集所有值,再一次性调用对应重载:

var cellValues = new List<object>();
for(int i = 0; i < 3; i++)
{
    cellValues.Add(c[i].Value.ToString());
}
d.Rows.Add(cellValues.ToArray());

或者用更简洁的写法(和第一段代码效果完全一致):

d.Rows.Add(new object[] { c[0].Value.ToString(), c[1].Value.ToString(), c[2].Value.ToString() });

内容的提问来源于stack exchange,提问作者J. Mini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:45:31