Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 返回0的数据表。ASP.NET位置2没有行_C#_Asp.net - Fatal编程技术网

C# 返回0的数据表。ASP.NET位置2没有行

C# 返回0的数据表。ASP.NET位置2没有行,c#,asp.net,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("c

我试图使用复选框从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();

要使上述代码正常工作,“dt”必须具有与GridView2相同的行的副本。但是,您可以从gridView的缓冲区中删除行,而不是从单独的表中删除行。使用
GridView2.Rows.RemoveAt(i)

您的循环是向后运行的,所以删除行应该不会有问题,因为如果您是从第一个运行到最后一个。现在,如果您需要跟踪要删除的行,以便发出数据库删除命令,这是另一个问题


Update:RemoveAt是一个针对行的方法,该行是dataGridViewRowCollection。请参阅:

如何初始化
dt
?dt=new DataTable();在页面加载中,默认情况下,新数据表不会有任何行。这就是为什么你会看到行。零计数我相信@ChetanRanpariya想问的是你是如何以及在哪里填充“dt”的?你能发布你的页面加载事件函数吗?我删除了那一行,但当它们是3行时,它只显示1