3

我正在使用删除行索引来删除 datagridview 中的一行。

但是当删除一行时,datagridview 会自动追加下一行

第一次删除任何索引然后它是正确的,但在第二次删除第 1 行索引行

我正在使用这段代码:

for (int i = 0; i < path.Length; i++)
{
    lpath.Add(path[i].ToString());
    dataGridView1.Rows.RemoveAt(int.Parse(arr[i]));
}
4

3 回答 3

1

使用 for 循环删除一行后,您必须减少“i”

见以下代码

 for (int i = 0; i < path.Length; i++)
{
   lpath.Add(path[i].ToString());
  dataGridView1.Rows.RemoveAt(int.Parse(arr[i]));
  i--;  }
于 2013-10-02T05:33:56.923 回答
0

for 循环中增加i比减少它有点奇怪。为什么不添加项目而不是清除所有行?

for (int i = 0; i < path.Length; i++) {
    lpath.Add(path[i].ToString());
}
dataGridView1.Rows.Clear();
于 2013-10-02T05:59:15.180 回答
0

dataGridView1正如我所看到的,您第一次偏离了索引。

假设您有一个包含元素的列表,{1,2,3,4,5}如果我们现在删除索引 3 然后 4 我们最终删除 3 和 5 给我们列表{1,2,4},但我们想删除 3 和 4 而不是 3 和 5

我认为你想要做的是获取你想要删除的所有索引,以及它们的顺序并从上到下删除,所以不是按顺序删除 3 和 4,而是删除 4 和 3 给我们列表{1,2,5}

List<int> RemoveList = new List<int>();
for (int i = 0; i < path.Length; i++)
{
    lpath.Add(path[i].ToString());
    RemoveList.Add(int.Parse(arr[i]));
}

//Remove highest index first.
RemoveList.OrderByDescending(a=>a);
for (int i = 0; i < RemoveList.Count; i++)
{
    dataGridView1.Rows.RemoveAt(RemoveList[i]);
}
于 2013-10-02T06:39:34.187 回答