繁体   English   中英

从DataGridView C#删除数据时出错

[英]Error while removing data from DataGridView C#

我正在使用C#开发一个存档软件,我只需要删除DataGridView中的选定行,但是当我尝试执行该功能时,程序将删除DataGridView中的所有行,而不是我选择的仅一行

这是代码:

private void dgvFattDdt_SelectionChanged(object sender, EventArgs e)
    {
        if(dgvFattDdt.RowCount == 1)
        {
            dgvFattDdt.ClearSelection();
            return;
        }
        foreach (DataGridViewRow row in dgvFattDdt.SelectedRows)
        {
            //here I save the data of the row into textboxes
            txtColli.Text = row.Cells[1].Value.ToString();
            txtDescMerce.Text = row.Cells[2].Value.ToString();
            txtUM.Text = row.Cells[3].Value.ToString();
            txtIso.Text = row.Cells[4].Value.ToString();
            txtLordo.Text = row.Cells[5].Value.ToString();
            txtTara.Text = row.Cells[6].Value.ToString();
            txtPrezzo.Text = row.Cells[8].Value.ToString();
            cbIVA.Text = row.Cells[10].Value.ToString();
            selectedRow = row.Index;
            ex_Colli = Convert.ToInt32(row.Cells[1].Value.ToString());
            decimal.TryParse(row.Cells[9].Value.ToString(), out ex_Importo);
            int.TryParse(row.Cells[10].Value.ToString(), out ex_Iva);
            //------------------------------
            dgvFattDdt.Rows.RemoveAt(row.Index);
        }
    }

有人能帮我吗?

谢谢

问题的原因是您在迭代时正在修改集合。 此逻辑并不安全,因为它可能会导致一些意外问题(例如删除所有行)。 您有以下选择:

  1. 使用for循环从最后向后迭代dgvFattDdt.SelectedRows集合,然后根据其索引删除当前的DataGridRow对象。

  2. 使用LINQ存储需要删除的行的索引,然后迭代此索引集合以删除DataGridRow对象。

问题是,当您在列表上运行时,您尝试从列表中删除一个项目,这使该列表出现索引问题。

您可以做的是将列表复制到临时列表,在临时列表上运行,然后从实际列表中删除

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM