0

我想从 gridview 中删除一行。这是我的代码

      //page load event  
      if(page.isPostback==false)  
      {  
        dataset ds=null;  
        ds=(dataset)Session["ds1"];  
        //session will contain dataset ds1 with data selected by user  
        if(ds!=null)  
        {  
          gvdetails.datasource=ds.Tables["Bus_Table"];  
          gvdetails.DataBind();  
       }  
     }

      protected void gvdetails_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    DataSet ds = (DataSet)Session["ds1"];
    ds.Tables["Bus_Table"].Rows[e.RowIndex].Delete();
    ds.Tables["Bus_Table"].AcceptChanges();
    Session["ds1"] = ds;
    gvDetails.DataSource = ds.Tables["Bus_Table"];
    gvDetails.DataBind(); 
}

代码工作正常,但是当我尝试单击删除链接时。我在这一行“ds.Tables["Bus_Table"].Rows[e.RowIndex].Delete();”中收到运行时错误

  error :Object reference not set to an instance of an object.NULLREFERENCEEXCEPTION was unhandled by the usercode.Use the "new " keyword to create an object instance

我无法弄清楚问题所在。请帮忙

4

3 回答 3

1

任何一个 :

  • Session["ds1"]不存在(因为您的 DataSet 不在 Session 中),
  • 会话没有那个表,或者
  • 你引用了一个错误的 RowIndex。

因为代码全部链接在一起,所以您有两个选项可以找出哪个:

  1. 连接调试器并检查ds,ds.Tables["Bus_Table"]ds.Tables["Bus_Table"].Rows[e.RowIndex], OR的值
  2. 在您的代码中添加空检查并进行部署。
于 2012-07-05T14:04:03.943 回答
0

您似乎绑定到employee表:

gvdetails.datasource=ds.Tables["employee"];  

并从Bus_Table表中删除:

ds.Tables["Bus_Table"].Rows[e.RowIndex].Delete(); 

那是行不通的,是吗?

于 2012-07-05T14:18:05.633 回答
-2

// 这是一个例子,认为它可能会有所帮助

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
            string EmployeeID = GridView1.DataKeys[e.RowIndex].Value.ToString();
            string Query = “delete Employee where Employee.EmployeeID = “ + EmployeeID;
            BindGridData(Query);
     }

private void BindGridData(string Query)
{
  string connectionstring  =        ConfigurationManager.ConnectionStrings["SampleConnectionString"].ConnectionString;

  using (SqlConnection conn = new SqlConnection(connectionstring))
  {
    conn.Open();
    using (SqlCommand comm = new SqlCommand(Query, conn))
    {
        SqlDataAdapter da = new SqlDataAdapter(comm);
        DataSet ds = new DataSet();
        da.Fill(ds);
        GridView1.DataSource = ds;
        GridView1.DataBind();
    }
  }

}

希望我现在清楚...

于 2012-07-05T14:10:18.433 回答