我有一个小的GridView,可以容纳某些项目。这是在用户单击项目后生成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页面中,我已经添加了Delete Command,并在代码和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);
但它抛出的Object引用未设置为对象异常的实例。如果我放一个IF来检查该行是否为空,它将根本不执行...但数据显然不是空的。
答案 0 :(得分:1)
这是错误:'System.Web.UI.WebControls.GridViewRowCollection' 不包含'RemoveAt'的定义,也没有扩展方法 'RemoveAt'接受第一个类型的参数 可以找到'System.Web.UI.WebControls.GridViewRowCollection'
是的,此方法不存在,因为您可以看到here。您应该修改数据源,然后对网格进行数据绑定。 DataRowCollection
有一个RemoveAt
method。
dt.Rows.RemoveAt(grdCarritoAddons.SelectedRow.RowIndex);
grdCarritoAddons.DataSource = dt;
grdCarritoAddons.DataBind();