2013-06-07 3 views
0

J'ai 3 panneau de contrôle de mise à jour asp.net qui updatePanel1, updatePanel2, updatePanel3. Lorsque le chargement de la première page updatePanel1 chargera automatiquement plus buttons ex: button1. Lorsque vous cliquez sur button1 dans updatePanel1, cela affichera les boutons dans updatePanel2 ex: button2. Lorsque vous cliquez sur button2, il déclenchera updatePanel3 et affichera les données dans updatePanel3 comme gridview.Ajax Mise à jour panneau asp.net déclencheur

Maintenant, quel est mon problème est quand cliquez sur button2 tous les boutons dans updatePanel2 perdent. pouvez-vous me donner la solution pourquoi je perds des boutons dans 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> 

Répondre

1

cela a à voir avec le viewstate. Puisque les boutons de updatepanel2 sont créés lors de l'exécution, ils sont perdus, c'est l'événement page_load. Vous devrez vous régénérer à chaque fois. La façon exacte dont vous allez l'implémenter dépend de la façon dont vous avez écrit votre code. sans code, je ne peux pas vous en dire plus.

+0

salut @ratna, merci ici J'ai déjà mis à jour ma question, oui vous avez raison j'utilise le programme par programme et comment j'utilise l'état d'affichage? – hendrathings

Questions connexes