1)
如果你想使用一个for循环是不明智的这条线还增加索引变量的代码通过集合迭代:
i++;
它已经增加。所以当你穿过dataGridView2
时,你实际上还会在dataGridView1
之间滑动一个位置。这不是你想要的(正如我从你的帖子中看到的,你描述了所需的比较)。您需要删除此行
2)
我想比较:1对3,1对4,2比3,2比4,3比3,3比4。
如果你想只比较name
列那么你的索引是正确的:
dataGridView2.Rows[j].Cells[1]
,但如果你想比较Id列则是因为索引编制从0
开始。因此,要获得从Id
列,你必须使用这样的正确的值:
string grid2 = dataGridView2.Rows[j].Cells[0].Value.ToString();
与此相比在您若条件:
dataGridView2.Rows[0].Cells[1].Value.ToString() == dataGridView1.Rows[0].Cells[1].Value.ToString()
你还用C
比较A
。我没有看到任何理由(将你的描述作为比较的愿望)。你可以摆脱它。
3)
如果你想改变一个集合的大小(通过删除,通过它你迭代它是明智的使用元素)反向for循环从dataGridView2.RowCount-1
开始,一直持续到>= 0
。否则,您可能会遇到ArgumentOutOfBounds
异常,因为除去启动循环时所用的元素并不多。结束索引处的元素将不再存在。
for (int i = dataGridView1.RowCount-1; i >= 0 ; i--)
{
for (int j = 0; j < dataGridView2.RowCount; j++)
{
string grid2 = dataGridView2.Rows[j].Cells[0].Value.ToString();
string grid1 = dataGridView1.Rows[i].Cells[0].Value.ToString();
if (grid1 == grid2)
{
dataGridView1.Rows.RemoveAt(i);
}
}
}
编辑:
的dataGridView1
可能会显示额外的空行这也是在这种情况下,你需要从i = dataGridView1.RowCount-2
开始计入dataGridView1.RowCount
。同样在你找到一个匹配并从dataGridView1
中删除该行之后,进一步搜索该行的匹配是没有意义的,因为它已经消失。所以你应该跳出内部循环,继续下一行:
for (int i = dataGridView1.RowCount - 2; i >= 0; i--)
{
for (int j = 0; j < dataGridView2.RowCount -1; j++)
{
string grid2 = dataGridView2.Rows[j].Cells[0].Value.ToString();
string grid1 = dataGridView1.Rows[i].Cells[0].Value.ToString();
if (grid1 == grid2)
{
dataGridView1.Rows.RemoveAt(i);
break;
}
}
}
尝试在内部循环中删除增量语句(i ++;)。你增加你的变量我两次。 – missellorin
嗯,如果我删除它,它不起作用(它只显示值,当我= 0和停止)。 –
“只显示数值”你在哪里显示数值?你不是在删除值吗? –