我想将第2列中的所有值都写入列表:
List<string> list = new List<string>();
foreach (var item in dataGridView1.Rows)
{
list.Add(item.Cells[1].Value.ToString);
}
但是,这会返回错误。
答案 0 :(得分:9)
对于错误:
'obejct'不包含'cells'的定义,也没有扩展名 方法'Cells'接受'object'类型的第一个参数可以是 发现(您是否缺少using指令或程序集引用?)。
您需要修改foreach
循环,而不是var
指定DataGridViewRow
foreach (DataGridViewRow item in dataGridView1.Rows)
{
list.Add(item.Cells[1].Value.ToString());
}
()
ToString
如果你想使用LINQ,你可以在一个语句中这样做:
List<string> list = dataGridView1.Rows
.OfType<DataGridViewRow>()
.Select(r => r.Cells[1].Value.ToString())
.ToList();
编辑:
如果任何行的Cell[1]
的值为null
,则上述可能会导致Null引用异常,您可以在添加之前添加检查,以检查是否存在单元格以及是否有值或不。像:
List<string> list = new List<string>();
foreach (DataGridViewRow item in dataGridView1.Rows)
{
if (item.Cells.Count >= 2 && //atleast two columns
item.Cells[1].Value != null) //value is not null
{
list.Add(item.Cells[1].Value.ToString());
}
}
上面的检查可以避免在空对象上调用ToString
而你不会得到异常。
答案 1 :(得分:1)
使用LINQ来计算Null异常:
List<string> list = dataGridView1.Rows
.OfType<DataGridViewRow>()
.Where(x => x.Cells[1].Value != null)
.Select(x => x.Cells[1].Value.ToString())
.ToList();
答案 2 :(得分:0)
您遇到的错误是因为Rows
在您使用DataGridViewRow
时未自动转换为var
。
正确的代码是:
List<string> list = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
list.Add(row .Cells[1].Value.ToString());
}