[英]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);
}
}
有人能帮我吗?
谢谢
问题的原因是您在迭代时正在修改集合。 此逻辑并不安全,因为它可能会导致一些意外问题(例如删除所有行)。 您有以下选择:
使用for
循环从最后向后迭代dgvFattDdt.SelectedRows
集合,然后根据其索引删除当前的DataGridRow
对象。
使用LINQ存储需要删除的行的索引,然后迭代此索引集合以删除DataGridRow
对象。
问题是,当您在列表上运行时,您尝试从列表中删除一个项目,这使该列表出现索引问题。
您可以做的是将列表复制到临时列表,在临时列表上运行,然后从实际列表中删除
祝好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.