【发布时间】:2014-01-21 22:09:53
【问题描述】:
我有一个小的 GridView 可以容纳某些项目。这是用户单击项目后生成网格视图的代码:
if (grdCarritoAddons.Rows.Count == 0)
{
dt.Columns.Add(new DataColumn("Name", typeof(System.String)));
dt.Columns.Add(new DataColumn("Price", typeof(System.String)));
}
else
{
dt = HttpContext.Current.Session["DataTable"] as DataTable;
}
Session["DataTable"] = dt;
DataRow dr1 = dt.NewRow();
dr1[0] = AddonName.ToString();
dr1[1] = Convert.ToDecimal(PriceAddon);
dt.Rows.Add(dr1);
grdCarritoAddons.DataSource = dt;
grdCarritoAddons.DataBind();
}
现在我需要一个用户能够选择一个项目并删除一个特定的项目。在 ASPX 页面中,我已经添加了删除命令并在代码和 GridView 属性中创建了一个空的 RowDeleting 方法。它不工作,我想出了一个有点工作但不是我需要做的解决方案。它基本上清除了整个 DataTable。
//grdCarritoAddons.DataSource = dt;
//grdCarritoAddons.DataBind();
//Session["DataTable"] = dt;
//Session.Remove("Total");
我试过这个:
grdCarritoAddons.Rows.RemoveAt(grdCarritoAddons.SelectedRows[0].Index);
但是不行。在 ASP 中不起作用。感谢您的帮助:)
当前代码:
dt = HttpContext.Current.Session["DataTable"] as DataTable;
dt.Rows.RemoveAt(grdCarritoAddons.SelectedRow.RowIndex);
但是它抛出了一个未设置为对象异常实例的对象引用。如果我放一个 IF 来检查该行是否为空,它根本不会执行......但数据显然不是空的。
【问题讨论】:
-
“在 ASP 中不起作用” 这是什么意思,您是否得到异常或不希望的结果?究竟会发生什么?
-
这是错误:“System.Web.UI.WebControls.GridViewRowCollection”不包含“RemoveAt”的定义,并且没有扩展方法“RemoveAt”接受“System.Web”类型的第一个参数.UI.WebControls.GridViewRowCollection' 可以找到(您是否缺少 using 指令或程序集引用?)
-
是的,这个方法不存在,你可以看到here。您应该改为修改数据源并在之后对网格进行数据绑定。
DataRowCollection有一个RemoveAtmethod。