这是我的代码:
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]);
}
}
我希望只看到'item001'的行 我无法实现这个结果我得到一些空值的行: 并且超过项目
会变得更糟答案 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]);
}
}