0

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)
    {

    }
}
4

2 に答える 2

1

問題はここにあります:

dt = (DataTable)GridView1.DataSource;

DataSourceページライフサイクルの前のステップで明示的に設定されている場合にのみ、null ではありません。あなたの場合、ポストバック中に(削除コマンドによってトリガーされた)どこにも設定されていないため、DataSourcenullです。

これを処理する正しい方法は、DB で必要な削除クエリを実行し、更新された情報を取得して、グリッドを再バインドすることです。

于 2013-07-24T09:34:12.277 に答える
0

これを試してください

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
   IList lst = (IList)Session["lst"];
   lst .RemoveAt(e.RowIndex);
    GridView1.DataSource = lst ;
    GridView1.DataBind();
}
于 2013-07-24T09:47:17.290 に答える