C# 我能';无法清除datagridview中的所有空行

C# 我能';无法清除datagridview中的所有空行,c#,datagridview,C#,Datagridview,这是我的密码: foreach (DataGridViewRow row in dataGridView1.Rows) { if (row.Cells[0].Value.ToString().Trim() == "") { dataGridView1.Rows.Remove(row); } } 还尝试: for (int i = 0; i < dataGridView1.Rows.Co

这是我的密码:

    foreach (DataGridViewRow row in dataGridView1.Rows)
    {
        if (row.Cells[0].Value.ToString().Trim() == "")
        {
            dataGridView1.Rows.Remove(row);
        }
    }
还尝试:

    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        if (dataGridView1.Rows[i].Cells[0].Value.ToString().Trim() == "")
        {
            dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
        }
    }
for(int i=0;i

我希望只看到带有'item001'的行 我无法实现此结果,因为我得到了一些空值行:
当您在枚举时从集合中删除多个项时,情况会变得更糟,这将导致未定义的行为。你可能需要一份

var rows = dataGridView1.Rows.Cast<DataGridViewRow>().ToArray();
foreach (DataGridViewRow row in rows)
{
    if (row.Cells[0].Value.ToString().Trim() == "")
    {
        dataGridView1.Rows.Remove(row);
    }
}

它无法正常工作,因为您在迭代集合时从集合中删除了元素;删除会导致集合重新调整其索引,不是吗?因此,当您通过调用
MoveNext
进入下一次迭代时,您会得到意外的元素。

而不是与
进行比较,请尝试
string.IsNullOrEmpty
方法:

for (int i = 0; i < dataGridView1.RowCount; i++)
{
   if (string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[0].Value.ToString()))
   {
      dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
   }
}
for(int i=0;i
for
Count-1
循环到
0
@C.evenhui是的,有很多选择,这就是为什么我将一个句子框定为
你可以使用的,它也会留下一些不想要的结果,但。。。你应该像@C.Evenhuis所说的那样,使用
反面的
for(int i=dataGridView1.Rows.Count-1;i>=0;i-)
Gotcha,在for循环的反面有点混乱,但为启示欢呼。它说有期待”)“我的坏,添加了缺少的括号和大括号(对于一行程序可选)在更新的答案中。这不会编译为
string。IsNullOrEmpty
只能与
string
一起使用,其中as
属性是
对象
;即使它会被编译,这也不会起作用。它也会留下一些不想要的结果!
for (int i = 0; i < dataGridView1.RowCount; i++)
{
   if (string.IsNullOrEmpty(dataGridView1.Rows[i].Cells[0].Value.ToString()))
   {
      dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
   }
}