从GridView中删除行,对象未设置为对象引用

时间:2013-07-24 09:28:55

标签: c# asp.net visual-studio-2010 dictionary datagridview

我正在尝试从Datagrid中删除行。我使用Ilist作为数据源。我已经在DataGrid_Rowdeleting事件中初始化了IList对象,但是同样的异常却让我很难受。请帮帮我。 我的代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.Data;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            IList lst = new ArrayList();
            Session["lst"] = lst;
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Class1 c = new Class1();
        c.product = txtName.Text;
        c.quantity = txtQty.Text;
        IList lst = (IList)Session["lst"];
        lst.Add(c);
        GridView1.DataSource = lst;
        GridView1.DataBind();

    }
    protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
       DataTable dt = new DataTable();
       dt = (DataTable)GridView1.DataSource;
        dt.Rows.RemoveAt(e.RowIndex);
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
}

2 个答案:

答案 0 :(得分:1)

问题出在这里:

dt = (DataTable)GridView1.DataSource;
仅当在页面生命周期的先前步骤中明确设置时,

DataSource才为空。在你的情况下,它在回发期间没有设置(由delete命令触发),因此DataSource为空。

正确处理此问题的方法是在数据库中运行必要的删除查询,检索更新的信息并重新绑定网格。

答案 1 :(得分:0)

试试这个

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
   IList lst = (IList)Session["lst"];
   lst .RemoveAt(e.RowIndex);
    GridView1.DataSource = lst ;
    GridView1.DataBind();
}