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”的定义,
并且找不到接受“GridViewRowCollection”类型的第一个参数的扩展方法“RemoveAt”(您是否缺少 using 指令或程序集引用?)
解决方案
你有两个主要问题:
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();
类似问题:
推荐阅读
- java - 使用 Cloudera 5.14 和 Spark2 配置 Livy:Livy 找不到自己的 JAR 文件
- java - 将函数添加到另一个包中包含的类
- java - 来自 Angular5 的 PUT 请求到 spring-boot
- php - 如何在面向对象的php中在Restapi中发送json响应
- c# - 是否要向数据网格添加列和行?
- javascript - 小时为“12”时的javascript时间格式问题
- if-statement - VB 脚本 If then End 语句
- php-7 - 使用带有 FILTER_FLAG_ALLOW_FRACTION 的 Filter_SANITIZE_FLOAT 但仍然丢失逗号?
- node.js - 纱线添加嵌套本地包
- mysql - 如何从 API 控制器中提取 MySQL?