0

ボタンのクリック時にグリッドビューを動的に作成するページがありますが、これは正常に機能します。グリッドを作成するとともに、グリッドの上部に削除するためのリンクボタンがあります。今、私が達成しようとしているのは、グリッドの1つを削除すると、ページからグリッドが削除され、数字が再同期されることです。つまり、私は次のものを持っているとしましょう:

Grid1
Grid2
Grid3
Grid4

Grid3 を削除することにした場合、実際には次のようになります。

Grid1
Grid2
Grid4

そして、ページ上の何かをクリックしてリロードするか何かすると、番号が正しく再同期されます。

Grid1
Grid2
Grid3

そもそもなぜそれをするのか、なぜこのようにしないのか、私にはわかりません。誰かがこれで私を助けてくれますか?

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Page_Init(object sender, EventArgs e)
    {
        string ctrlname = this.Page.Request.Params.Get("__EVENTTARGET");

        if (Session["Tables"] == null)
        {

            Session.Add("Tables", 1);

            DataTable dt = GetTable();

            Session.Add(Session["Tables"].ToString(), dt);
            GridView gv = new GridView();
            gv.ID = "Grid-" + Session["Tables"].ToString();
            gv.DataSource = dt;
            gv.DataBind();
            LinkButton lb = new LinkButton();
            lb.ID = "Delete-Grid-" + Session["Tables"].ToString();
            lb.Text = "Delete Grid " + Session["Tables"].ToString();
            lb.Click += new EventHandler(DeleteGrid);
            PlaceHolder1.Controls.Add(lb);
            PlaceHolder1.Controls.Add(gv);

        }
        if (IsPostBack)
        {
            PlaceHolder1.Controls.Clear();
            int next = (int)Session["Tables"];

            for (int i = 1; i <= (int)Session["Tables"]; i++)
            {
                GridView gv = new GridView();
                gv.ID = "Grid-" + i.ToString();
                gv.DataSource = (DataTable)Session[i];
                gv.DataBind();
                LinkButton lb = new LinkButton();
                lb.ID = "Delete-Grid-" + i.ToString();
                lb.Text = "Delete Grid " + i.ToString();
                lb.Click += new EventHandler(DeleteGrid);
                PlaceHolder1.Controls.Add(lb);
                PlaceHolder1.Controls.Add(gv);
            }
            if (ctrlname == "Button1")
            {
                next = next + 1;
                Session["Tables"] = next;
                DataTable dt = GetTable();
                Session.Add(Session["Tables"].ToString(), dt);
                GridView gv = new GridView();
                gv.ID = "Grid-" + next.ToString();
                gv.DataSource = (DataTable)Session[next];
                gv.DataBind();
                LinkButton lb = new LinkButton();
                lb.ID = "Delete-Grid-" + next.ToString();
                lb.Text = "Delete Grid " + next.ToString();
                lb.Click += new EventHandler(DeleteGrid);
                PlaceHolder1.Controls.Add(lb);
                PlaceHolder1.Controls.Add(gv);
            }

        }
    }



    protected void Button1_Click(object sender, EventArgs e)
    {

    }




    protected void DeleteGrid(object sender, EventArgs e)
    {
        LinkButton gridLink = (LinkButton)sender;
        String gridNum = gridLink.ID.ToString().Split('-').Last();

        GridView grid = (GridView)this.Page.FindControl("Grid-" + gridNum);
        LinkButton lbd = (LinkButton)this.Page.FindControl("Delete-Grid-" + gridNum);


        PlaceHolder1.Controls.Remove(grid);
        PlaceHolder1.Controls.Remove(lbd);

        int next = (int)Session["Tables"];
        next = next - 1;
        Session.Add("Tables", next);
        Session.Remove(gridNum);
    }






    public DataTable GetTable()
    {
        //
        // Here we create a DataTable with a few columns.
        //
        // Create Datatable to store all colums
        DataTable dt = new DataTable();
        DataRow dr = null;
        dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
        dt.Columns.Add(new DataColumn("Size", typeof(string)));
        dt.Columns.Add(new DataColumn("Description", typeof(string)));
        dt.Columns.Add(new DataColumn("Quantity", typeof(string)));
        dt.Columns.Add(new DataColumn("Unit", typeof(string)));
        dt.Columns.Add(new DataColumn("Duration", typeof(string)));
        dt.Columns.Add(new DataColumn("DurationType", typeof(string)));
        dt.Columns.Add(new DataColumn("Amount", typeof(string)));
        dr = dt.NewRow();
        dr["RowNumber"] = 1;
        dr["Size"] = string.Empty;
        dr["Description"] = string.Empty;
        dr["Quantity"] = string.Empty;
        dr["Unit"] = string.Empty;
        dr["Duration"] = string.Empty;
        dr["DurationType"] = string.Empty;
        dr["Amount"] = string.Empty;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["RowNumber"] = 2;
        dr["Size"] = string.Empty;
        dr["Description"] = string.Empty;
        dr["Quantity"] = string.Empty;
        dr["Unit"] = string.Empty;
        dr["Duration"] = string.Empty;
        dr["DurationType"] = string.Empty;
        dr["Amount"] = string.Empty;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["RowNumber"] = 3;
        dr["Size"] = string.Empty;
        dr["Description"] = string.Empty;
        dr["Quantity"] = string.Empty;
        dr["Unit"] = string.Empty;
        dr["Duration"] = string.Empty;
        dr["DurationType"] = string.Empty;
        dr["Amount"] = string.Empty;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["RowNumber"] = 4;
        dr["Size"] = string.Empty;
        dr["Description"] = string.Empty;
        dr["Quantity"] = string.Empty;
        dr["Unit"] = string.Empty;
        dr["Duration"] = string.Empty;
        dr["DurationType"] = string.Empty;
        dr["Amount"] = string.Empty;
        dt.Rows.Add(dr);

        dr = dt.NewRow();
        dr["RowNumber"] = 5;
        dr["Size"] = string.Empty;
        dr["Description"] = string.Empty;
        dr["Quantity"] = string.Empty;
        dr["Unit"] = string.Empty;
        dr["Duration"] = string.Empty;
        dr["DurationType"] = string.Empty;
        dr["Amount"] = string.Empty;
        dt.Rows.Add(dr);
        return dt;
    }


}
4

1 に答える 1

0

まず、asp.net ページのライフ サイクルを知る必要があります。この記事を参照してください...

あなたの場合、削除イベントはページ読み込みイベントの後に発生しています。したがって、行が削除される前に同期が行われます。同期コードを別のメソッドに入れて、削除後に呼び出す必要があるかもしれません...

于 2013-10-03T00:59:07.490 に答える