如何从datagridview中删除行?

时间:2017-11-06 13:07:04

标签: c# visual-studio datagridview row

我的桌子就是那个

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”行中有错误。我该如何解决这个问题?

1 个答案:

答案 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--)
    {