我无法清除datagridview中的所有空行

时间:2014-03-03 09:04:48

标签: 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.Count; i++)
    {
        if (dataGridView1.Rows[i].Cells[0].Value.ToString().Trim() == "")
        {
            dataGridView1.Rows.Remove(dataGridView1.Rows[i]);
        }
    }

enter image description here

我希望只看到'item001'的行 我无法实现这个结果我得到一些空值的行: enter image description here 并且超过项目

会变得更糟

2 个答案:

答案 0 :(得分:1)

您正在枚举时从集合中删除项目,这将导致未定义的行为。您可能需要一份副本。

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

或使用for循环

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

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

答案 1 :(得分:0)

不要与""进行比较,请尝试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]);
   }
}