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

jac*_*obz 2 c# datagridview list winforms

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

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

但是,这会返回错误.

Hab*_*bib 9

对于错误:

'obejct'不包含'cells'的定义,也没有扩展方法'Cells'可以找到接受'object'类型的第一个参数(你是否缺少using指令或汇编引用?).

您需要修改foreach循环而不是var指定DataGridViewRow

foreach (DataGridViewRow  item in dataGridView1.Rows)
{
    list.Add(item.Cells[1].Value.ToString());
}
Run Code Online (Sandbox Code Playgroud)

另外你需要()ToString

如果你想使用LINQ,那么你可以在一个语句中这样做:

List<string> list = dataGridView1.Rows
                             .OfType<DataGridViewRow>()
                             .Select(r => r.Cells[1].Value.ToString())
                             .ToList();
Run Code Online (Sandbox Code Playgroud)

编辑:

如果Cell[1]任何行的值是null你可以在添加之前添加一个检查是否存在单元格以及它是否有值,上面的结果可能会导致Null Reference异常.喜欢:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的检查可以避免调用ToStringnull对象,也不会得到异常.


小智 5

使用 LINQ 解决 Null 异常:

List<string> list = dataGridView1.Rows
                       .OfType<DataGridViewRow>()
                       .Where(x => x.Cells[1].Value != null)
                       .Select(x => x.Cells[1].Value.ToString())
                       .ToList();
Run Code Online (Sandbox Code Playgroud)