数据表返回0.在位置2 ASP.NET没有行

时间:2018-05-16 15:04:38

标签: c# asp.net

我尝试使用复选框从gridview中删除一行或多行;但是,当我选中此框时,它会显示以下错误消息:位置2处没有行。将此行添加到debug dt.rows.count> 0,我认识到count为0. gridview中显示的数据是从数据库表中提取的。

  for(int i = GridView2.Rows.Count - 1; i >= 0; i--)
{
    var row = GridView2.Rows[i];
    CheckBox chk = row.FindControl("chkInvoice") as CheckBox;
    if (chk != null && chk.Checked)
    {
       dt.Rows.RemoveAt(i);
    }
}
  GridView2.DataSource = dt;
        GridView2.DataBind();

1 个答案:

答案 0 :(得分:0)

要使上面的代码工作,'dt'必须有一个相同行的副本,顺序与GridView2相同。但是,您可以将它们从gridView的缓冲区中删除,而不是从单独的表中删除行。运用 GridView2.Rows.RemoveAt(i);

您的循环正在向后运行,因此删除行应该没有问题,因为如果您从头到尾运行则会出现问题。现在,如果您需要跟踪要删除的行,以便您可以发出数据库删除,那么这是另一个问题。

更新:RemoveAt是Rows上的一个方法,它是一个dataGridViewRowCollection。请参阅:https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewrowcollection.removeat(v=vs.110).aspx