dataGridView "remove empty rows" - 按钮
dataGridView "remove empty rows" - button
总结:
Windows 10
Visual Studio 2015
C#,Win Forms
dataGridView
-> 尝试删除按钮单击事件中的空行
(我不知道问题出在哪里,所以我慷慨地添加了其他按钮的代码)
我正在使用一些按钮来添加行:
private void someButton_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Add(1);
dataGridView1.Select();
dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
}
还有一个用于删除 dataGridView 的最后一行的按钮:
private void anotherButton_Click(object sender, EventArgs e)
{
if (dataGridView1.Rows.Count > 0)
{
dataGridView1.Rows.Remove(dataGridView1.Rows[dataGridView1.Rows.Count - 1]);
}
}
由于(目前)用户将能够自由编辑 dataGridView 中的单元格,因此某些行可能最终为空。为了解决这个问题,我尝试添加第三个按钮来删除空行:
private void thirdButton_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[0].Value == null)
{
dataGridView1.Rows.RemoveAt(row.Index);
}
}
}
当我按下 "thirdButton" 时,一些空行被删除,但有趣的是,并不是所有的空行。我玩了一会儿,发现我必须多次按下按钮才能擦除所有空行。 dataGridView 的行为如下所示:
存在 4 个空行 + 按下按钮
-> 剩下 2 个空行
2 个空行 + 按下按钮
-> 剩下 1 个空行
1 最后一个空行 + 按下按钮
-> 0 个空行 (yay)
(与例如 11 -> 5 -> 2 -> 1 -> 0 相同)
看来我的按钮将空行数减半了,我想知道为什么!
有什么想法吗?
您不能像在 ForEach 中那样修改集合。尝试反向迭代集合,这会保留索引顺序:
for (int i = dataGridView1.Rows.Count - 1; i > -1; i--)
{
DataGridViewRow row = dataGridView1.Rows[i];
if (!row.IsNewRow && row.Cells[0].Value == null)
{
dataGridView1.Rows.RemoveAt(i);
}
}
我想到了两件事。第一个是:
- 您应该检查 null 和“”。为了简化这一点,只需检查行长度是否等于 0。有时用户可能会留下一个不会被检测为 null 或长度 == 0 的空格,因此在检查 [=15= 之前尝试以编程方式删除每个条目的空格]
- 第二个问题可能是索引顺序。当您删除行时,索引会升高并留下一行。一种解决方案是从末尾删除行。
总结:
Windows 10
Visual Studio 2015
C#,Win Forms
dataGridView
-> 尝试删除按钮单击事件中的空行
(我不知道问题出在哪里,所以我慷慨地添加了其他按钮的代码)
我正在使用一些按钮来添加行:
private void someButton_Click(object sender, EventArgs e)
{
dataGridView1.Rows.Add(1);
dataGridView1.Select();
dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
}
还有一个用于删除 dataGridView 的最后一行的按钮:
private void anotherButton_Click(object sender, EventArgs e)
{
if (dataGridView1.Rows.Count > 0)
{
dataGridView1.Rows.Remove(dataGridView1.Rows[dataGridView1.Rows.Count - 1]);
}
}
由于(目前)用户将能够自由编辑 dataGridView 中的单元格,因此某些行可能最终为空。为了解决这个问题,我尝试添加第三个按钮来删除空行:
private void thirdButton_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.Cells[0].Value == null)
{
dataGridView1.Rows.RemoveAt(row.Index);
}
}
}
当我按下 "thirdButton" 时,一些空行被删除,但有趣的是,并不是所有的空行。我玩了一会儿,发现我必须多次按下按钮才能擦除所有空行。 dataGridView 的行为如下所示:
存在 4 个空行 + 按下按钮
-> 剩下 2 个空行
2 个空行 + 按下按钮
-> 剩下 1 个空行
1 最后一个空行 + 按下按钮
-> 0 个空行 (yay)
(与例如 11 -> 5 -> 2 -> 1 -> 0 相同)
看来我的按钮将空行数减半了,我想知道为什么! 有什么想法吗?
您不能像在 ForEach 中那样修改集合。尝试反向迭代集合,这会保留索引顺序:
for (int i = dataGridView1.Rows.Count - 1; i > -1; i--)
{
DataGridViewRow row = dataGridView1.Rows[i];
if (!row.IsNewRow && row.Cells[0].Value == null)
{
dataGridView1.Rows.RemoveAt(i);
}
}
我想到了两件事。第一个是:
- 您应该检查 null 和“”。为了简化这一点,只需检查行长度是否等于 0。有时用户可能会留下一个不会被检测为 null 或长度 == 0 的空格,因此在检查 [=15= 之前尝试以编程方式删除每个条目的空格]
- 第二个问题可能是索引顺序。当您删除行时,索引会升高并留下一行。一种解决方案是从末尾删除行。