删除动态生成的gridview中的特定行

时间:2014-01-21 22:09:53

标签: c# asp.net gridview

我有一个小的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来检查该行是否为空,它将根本不执行...但数据显然不是空的。

1 个答案:

答案 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();