使用复选框从网格视图中删除 Asp.net 不起作用



我正在尝试使用复选框从网格视图中删除项目,但我有这个并删除了每个项目。

DataTable data = (DataTable)(GridView2.DataSource);
data.Rows.RemoveAt(GridView2.Rows.Count - 1);
data.AcceptChanges();
GridView2.DataSource = dt;
GridView2.DataBind();

那我试试这个

for (int i = GridView2.SelectedRow.Count - 1; -1 < i; i--)
{
object objChecked = GridView2.SelectedRow[i].Cells[0].Value;
if ((objChecked != null) && !(bool)objChecked)
{
GridView2.Rows.RemoveAt(i);
}
}

这些是我遇到的错误

  • 运算符"-"不能应用于类型为"方法组"的操作数,并且 "int"
  • 不能将带有 [] 的索引应用于类型的表达式 '
  • GridViewRowCollection"不包含"RemoveAt">
  • 的定义
    ,并且没有扩展方法"RemoveAt"接受类型的第一个参数 可以找到"网格视图行集合"(您是否缺少使用 指令还是程序集引用?

您有两个主要问题:

1(GridView.SelectedRow不是集合属性,而是标准属性。因此,您既不能在其上使用Count属性,也不能对其使用数组索引。若要使用循环在行之间循环for请改用GridView.Rows.Count属性。

for (int i = 0; i < GridView2.Rows.Count; i++)
{
// do something
}

2(RemoveAt方法中不存在GridViewRowCollection方法,您可以在此处看到。您需要从数据源中删除具有选定索引的行,然后重新绑定到GridView

因此,使用foreach循环来迭代网格行Checked并检查每个复选框的属性,如下例所示。

foreach (GridViewRow row in GridView2.Rows)
{
CheckBox chk = row.FindControl("CheckBoxName") as CheckBox;
if (chk != null && chk.Checked)
{
// delete from data source (e.g. DataTable), not GridView row
dt.Rows.RemoveAt(row.RowIndex);
// you can execute delete query against DB here
}
}
// rebind the grid
GridView2.DataSource = dt;
GridView2.DataBind();

类似问题:

使用复选框删除 GridView 中的多行

删除动态生成的网格视图中的特定行

最新更新