我的桌子就是那个
Joe Jackson 200
Jackson Sue 200
我的代码就是那个
for (int i = 0; i < dataGridView1.RowCount; i++)
{
for (int j = 1; j < dataGridView1.RowCount; j++)
{
if (dataGridView1.Rows[i].Cells[1].Value == dataGridView1.Rows[j].Cells[0].Value)
{
int miktar_alici = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
int miktar_satici = Convert.ToInt32(dataGridView1.Rows[j].Cells[2].Value);
if (miktar_alici == miktar_satici)
{
dataGridView1.Rows[j].Cells[0].Value = dataGridView1.Rows[i].Cells[0].Value;
dataGridView1.Rows.RemoveAt(dataGridView1.Rows[i].Index);
}
}
}
}
我希望我的代码输出如下内容:
Joe Sue 200
只有一行。但是代码在“RemoveAt”行中有错误。我该如何解决这个问题?
答案 0 :(得分:0)
当您想要从网格中删除行时,您的问题不仅仅是从一开始就进行迭代而不是从末尾进行迭代。
假设您这样做了:
for (int i = dataGridView1.RowCount - 1; i > 0; i--)
{
for (int j = dataGridView1.RowCount - 2; j >= 0; j--)
{
if (dataGridView1.Rows[i].Cells[1].Value == dataGridView1.Rows[j].Cells[0].Value)
{
int miktar_alici = Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value);
int miktar_satici = Convert.ToInt32(dataGridView1.Rows[j].Cells[2].Value);
if (miktar_alici == miktar_satici)
{
dataGridView1.Rows[j].Cells[0].Value = dataGridView1.Rows[i].Cells[0].Value;
dataGridView1.Rows.RemoveAt(dataGridView1.Rows[i].Index);
}
}
}
}
那么我可以向你保证,你的网格几乎每一行都会被删除。
实际上,你会继续遍历所有行,但是最后一行j
,因此对于此范围内的每个i
,都会有i == j
的迭代。
因此,miktar_alici
将等于miktar_satici
,您将删除该行。
最后,只剩下最后一行,我很确定这不是你想要的行为。
现在,您应该从RowCount
开始,而不是j
使用i - 1
。这样您就不会再将行与之前使用i
迭代的所有行进行比较,而且您永远不会有i == j
。
for (int i = dataGridView1.RowCount - 1; i > 0; i--)
{
for (int j = i - 1; j >= 0; j--)
{