DataGridView将列中的所有值都写入列表

时间:2014-01-23 16:37:00

标签: c# winforms list datagridview

我想将第2列中的所有值都写入列表:

List<string> list = new List<string>();
foreach (var item in dataGridView1.Rows)
{
    list.Add(item.Cells[1].Value.ToString);
}

但是,这会返回错误。

3 个答案:

答案 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());
}