使用复选框Asp.net从gridview中删除不起作用

时间:2018-05-07 21:56:51

标签: c# asp.net

我正在尝试使用复选框从gridview中删除项目,但我已经删除了所有项目。

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'接受第一个类型的参数 可以找到'GridViewRowCollection'(你是否错过了使用 指令或程序集引用?)

1 个答案:

答案 0 :(得分:0)

您有两个主要问题:

1)GridView.SelectedRow不是集合属性,它是标准属性。因此,您既不能使用Count属性也不能使用数组索引。要使用for循环在行之间进行迭代,请改用GridView.Rows.Count属性。

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

2)RemoveAt方法中不存在GridViewRowCollection方法,您可以看到here。您需要从数据源中删除具有所选索引的行,然后重新绑定到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();

类似问题:

delete multiple rows in gridview using checkboxes

Delete specific row in dynamically generated gridview