0

私は 3 つの更新パネル コントロール asp.net を持ってupdatePanel1updatePanel2ますupdatePanel3。ページが最初updatePanel1にロードされると、自動的にさらにロードされますbuttonsex: button1. をクリックbutton1すると、 ex:updatePanel1のボタンが表示されます。クリックすると、グリッドビューのようにデータがトリガーされて表示されます。updatePanel2button2button2updatePanel3updatePanel3

さて、私の問題は、button2すべてのボタンをクリックしてupdatePanel2失うことです。でボタンがなくなる理由を教えてくださいupdatePanel2

UPDATE

Default.cs

    protected void Page_Load(object sender, EventArgs e)
    {


        foreach (KeyValuePair<String, String> catshow in cat)
        {
            Button x = new Button();
            x.ID = catshow.Key;
            x.CssClass = "btnTop";
            x.Text = catshow.Value;
            x.CommandArgument = catshow.Key;
            x.Command += new CommandEventHandler(buttonClick);

            PlaceHolder1.Controls.Add(x);
        }


    }

    protected void buttonClick(object sender, CommandEventArgs e)
    {
        string key = e.CommandArgument.ToString();
        foreach (KeyValuePair<String, String> datshow in data[key])
        {
            Button x = new Button();
            x.ID = datshow.Key;
            x.CssClass = "btnBottom";
            x.Text = datshow.Value;
            x.CommandArgument = datshow.Key;
            x.Command += new CommandEventHandler(buttonClickPrd);

            PlaceHolder2.Controls.Add(x);
        }
    }


    protected void buttonClickPrd(object sender, CommandEventArgs e)
    {
        string key = e.CommandArgument.ToString();
        DataTable dt = new DataTable();
        dt.Columns.Add("Qty", Type.GetType("System.String"));
        dt.Columns.Add("Unit", Type.GetType("System.String"));
        dt.Columns.Add("Price", Type.GetType("System.String"));
        dt.Columns.Add("Total", Type.GetType("System.String"));
        dt.Rows.Add();
        dt.Rows[dt.Rows.Count - 1]["Qty"] = this.sales[key]["qty"];
        dt.Rows[dt.Rows.Count - 1]["Unit"] = this.sales[key]["unit"];
        dt.Rows[dt.Rows.Count - 1]["Price"] = this.sales[key]["price"];
        dt.Rows[dt.Rows.Count - 1]["Total"] = this.sales[key]["total"];
        GridView1.DataSource = dt;
        GridView1.DataBind();
    }

Default.aspx

 <asp:UpdatePanel ID="UpdatePanel1" runat="server">
             <ContentTemplate>
                 <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
            </ContentTemplate>
         </asp:UpdatePanel>
         <asp:UpdatePanel ID="UpdatePanel2" runat="server">
             <ContentTemplate>
                 <asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>
             </ContentTemplate>
         </asp:UpdatePanel>
         <asp:UpdatePanel ID="UpdatePanel3" runat="server">
             <ContentTemplate>
                 <asp:GridView ID="GridView1" runat="server"></asp:GridView>
             </ContentTemplate>
         </asp:UpdatePanel>
4

1 に答える 1

1

これはビューステートに関係しています。updatepanel2 のボタンは実行時に作成されるため、page_load イベントで失われます。毎回再生成する必要があります。正確にどのように実装するかは、コードの書き方によって異なります。コードがなければ、これ以上は言えません。

于 2013-06-07T08:59:15.707 に答える