Controls dynamisch hinzufügen

Immer mal wieder taucht in Foren die Frage auf, wie man Controls (wie z.B. die TextBox) dynamisch zu einer Seite hinzufügen kann. Mit Hilfe des PlaceHolder Controls ist dies ganz einfach möglich.

In diesem Beispiel soll der User die Anzahl der TextBox bestimmten können, die zur Seite hinzugefügt werden.

Zunächst muß das PlaceHolder Control, eine TextBox und ein Button auf der Seite plaziert werden. In die TextBox trägt der User die Anzahl der TextBoxen ein, die hinzugefügt werden sollen. Der Event OnClick ruft die Methode cmdAddControls_Click(), liest die Anzahl aus und übergibt diese anschließend an die Methode AddControls()

protected void cmdAddControls_Click(object sender, EventArgs e)
{
    int numToAdd = Convert.ToInt32(txtAddNum.Text);

    AddControls(numToAdd);
}

Die Methode AddControls() ist einfach aufgebaut. Innerhalb einer For-Schleife wird eine Instanz der TextBox-Klasse angelegt und diese dann der Control-Collection des PlaceHolders hinzugefügt.

private void AddControls(int number)
{
        for (int i = 0; i < number; i++)
        {
            TextBox textbox = new TextBox();
            textbox.Text = String.Format("Textbox {0}", i);

            plcControls.Controls.Add(textbox);
            plcControls.Controls.Add(new LiteralControl(""));
        }
 }

Das Ergebnis dieser paar Zeilen sind dynamisch hinzugefügte TextBox-Controls. Allerdings müssen diese Controls nach jedem PostBack erneut hinzugefügt werden. Der Inhalt jeder TextBox wird allerdings vom ViewState gespeichert und bleibt somit erhalten.

Ein Tip am Rand: Das Control DynamicControlsPlaceholder von Denis Bauer speichert die hinzugefügten Controls auch über PostBacks hinweg.

Das Beispielprojekt gibt es hier.

One thought on “Controls dynamisch hinzufügen

  1. hallo, auf welchen event gehen die postbacks der Seite.
    oder anders gefragt: weisst du zufällig, wie man ein event zum einzelnen Control anbinden kann
    gruß
    Raimund

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>