我正在使用复选框从数据表中删除一行;当我检查其中一个盒子;该行已删除。但如果我检查所有的盒子;它会给出此错误消息 位置1处没有行。 。如果我回去检查一个方框,则不会删除任何行。
foreach (GridViewRow row in GridView1.Rows)
{
CheckBox chk = row.FindControl("chkInvoice") as CheckBox;
if (chk != null && chk.Checked)
{
dt.Rows.RemoveAt(row.RowIndex);
}
}
GridView1.DataSource = dt;
GridView1.DataBind();
答案 0 :(得分:0)
如果使用foreach,则会在迭代时修改行。所以做一个反向循环并根据索引删除。
for(int i = GridView1.Rows.Count - 1; i >= 0; i--)
{
var row = GridView1.Rows[i];
CheckBox chk = row.FindControl("chkInvoice") as CheckBox;
if (chk != null && chk.Checked)
{
dt.Rows.RemoveAt(i);
}
}