【问题标题】:Delete specific row in dynamically generated gridview删除动态生成的gridview中的特定行
【发布时间】: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 有一个 RemoveAt method。

标签: c# asp.net gridview


【解决方案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();

【讨论】:

  • 嘿蒂姆。我正在使用类似的东西,但我继续使用您发布的代码。它在 IDE 中给我一个错误,说 Gridview 不包含 SelectedRows 的定义。
  • @LordRelix:ASP.NET GridView 不支持多个选定的行。该属性为SelectedRow,而GridViewRow 具有RowIndex 属性。编辑了我的答案。
  • 似乎将该列注册为空。它抛出一个“对象引用未设置为对象的实例”。错误。如果我输入 'if ((row != null))' 它不会执行并且不会有错误。奇怪的。为了以防万一,我尝试预先在代码中加载 DT。我将更新 OP 中的代码。
  • @LordRelix: which column,你的意思是 row 吗?如果是这样,您指的是哪一行,null 是什么?使用调试器。 DataTable 是否为空?
  • 蒂姆,非常感谢。我想到了。该行不能在“RowDeleting”下运行,而是在“SelectedIndexChanged”下运行。 RowDeleting 引发了该异常,但 SelectedIndexChanged 中的相同代码(然后保存到 DT 和数据绑定)运行良好。谢谢一百万。
猜你喜欢
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-13
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
相关资源
最近更新 更多