2009-08-11 2 views
1

Hier ist mein HTMLhinzufügen Kontrollen auf Panel nach Formview-Hilfe einfügen

<asp:UpdatePanel runat="server" ID="panel1" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <asp:FormView runat="server" ID="formViewUno" DataSourceID="odsBob" DefaultMode="Insert"> 
            <InsertItemTemplate> 
        <span>Name:</span> 
        <asp:Literal ID="Literal4" runat="server" Text="&nbsp;&nbsp;&nbsp;" /> 
        <asp:TextBox runat="server" ID="tbxName" Text='<%# Bind("Name") %>' /> 
        <br /> 
        <span>Age:</span> 
        <asp:Literal ID="Literal5" runat="server" Text="&nbsp;&nbsp;&nbsp;" /> 
        <asp:TextBox runat="server" ID="tbxAge" Text='<%# Bind("Age") %>' /> 
        <br /> 
        <span>City:</span> 
        <asp:Literal ID="Literal6" runat="server" Text="&nbsp;&nbsp;&nbsp;" /> 
        <asp:TextBox runat="server" ID="tbxCity" Text='<%# Bind("City") %>' /> 
        <br /> 
        <asp:Button ID="Button1" runat="server" CommandName="Insert" Text="Insert" /> 
       </InsertItemTemplate> 
      </asp:FormView> 
       <asp:Panel runat="server" ID="msgs"> 

      </asp:Panel> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Hier ist meine C#

private void odsBob_Inserted(object sender, ObjectDataSourceStatusEventArgs e) 
    { 

      var p = e.ReturnValue as Person; 
      if (p != null) 
      { 
       var msg = new Label 
           { 
            Text = 
             String.Format("{0} [Age:{1}, City:{2}] was successfully added", p.Name, p.Age, 
                p.City) 
           }; 

       var br = new LiteralControl { Text = "<br/>" }; 
       msgs.Controls.Add(br); 
       msgs.Controls.Add(msg); 


      } 

    } 

Wie kann ich anhalten (fügen Sie einen neuen nach dem Einsatz) das Label-Steuerelemente? Es wird ausgelöscht. Die neue hinzugefügt wird jedes Mal korrekt hinzugefügt. Wie kann ich die Kontrollsammlung im Takt halten? Danke für jede Hilfe.

Cheers, ~ ck

Antwort

1

Es ist wie Sie dynamisch ein Label-Objekt während der Event-Handler zu schaffen sind aussieht.

Dynamische Steuerelemente sind problematisch, da sie bei jedem Postback neu erstellt werden müssen. Denken Sie daran, dass ein Postback eine neue Instanz Ihres Page-Objekts erstellt - was bedeutet, dass die Steuerelemente, die Sie Ihrer letzten Seite hinzugefügt haben, weg sind - Ihr Panel wird bei jeder neuen Anfrage als leer initialisiert, sodass nur das letzte Literal/Label-Paar hinzugefügt wird.

Eine Lösung sein kann, alle notwendigen Textinformationen zu Session hinzufügen und haben Ihren Panel von dynamischen Etikett und Literale erzeugen, was auch immer in Session während Prerender ist.

Eine andere Lösung wäre komplexer, aber Sie könnten das Panel während der Init-Phase dynamisch Etiketten und Literale hinzufügen lassen. Wenn Sie sicherstellen können, dass während Init die gleiche Anzahl von Steuerelementen in derselben Reihenfolge hinzugefügt wird, wird der ViewState für diese Steuerelemente ordnungsgemäß in jedem PostBack nachverfolgt. Sie müßten im Grunde das zuletzt hinzugefügten Etikett und wörtliche in Session zu speichern, und haben es das Gremium auf der nächsten Anforderung in während Init hinzugefügt wurde, um sicherzustellen, holt wieder aus. Sie müssen außerdem einen Zähler speichern, damit das Steuerfeld weiß, wie viele Steuerelemente während Init hinzugefügt werden.

+0

Ich verwende ein ObjektDatasouce. Ich rufe Databind nicht explizit irgendwo an. Sollte ich sein? Sollte ich nur binden wenn! IsPostback? Ich dachte, Databind wurde implizit aufgerufen, wenn Sie eine DataSourceId verwenden. Bitte zeigen Sie in die richtige Richtung. Vielen Dank. :) – Hcabnettek

+0

Man spricht über Blind. Ich habe deinen Code falsch gelesen. Ich werde meine Antwort für Sie aktualisieren. – womp