0

グリッドビューから行を削除したいのですが、これが私のコードです

      //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 がセッションにないため)、
  • セッションにそのテーブルがない、または
  • 不適切な RowIndex を参照しています。

コードはすべて連鎖しているため、次の 2 つのオプションを使用して、どちらを見つけるかを確認できます。

  1. デバッガーを接続し、dsds.Tables["Bus_Table"]およびds.Tables["Bus_Table"].Rows[e.RowIndex]ORの値を確認します。
  2. コードに null チェックを追加してデプロイします。
于 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 に答える