Möchte man WebControls z.B. in Abhängigkeit von der Auswahl in einer DropDownList zur Laufzeit erzeugen, gibt es eine einfache Möglichkeit: man verwendet einen sog. PlaceHolder. Dieser fungiert als Platzhalter an der Stelle, an der später das entsprechende Control dynamisch erzeugt werden soll.

Zur Verdeutlichung des Ziels finden Sie hier ein Beispiel: Beispiel zur dynamischen Erzeugung von WebControls

Der Code der aspx-Datei sieht wie folgt aus:

 

 
1:   <%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="BlogSamples.DynamicControls._default" %>
2:   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
3:   <HTML>
4:       <HEAD>
5:           <title>default</title>
6:           <meta name="vs_snapToGrid" content="False">
7:           <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
8:           <meta name="CODE_LANGUAGE" Content="C#">
9:           <meta name="vs_defaultClientScript" content="JavaScript">
10:           <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
11:       </HEAD>
12:       <body MS_POSITIONING="GridLayout">
13:           <form id="Form1" method="post" runat="server">
14:               <asp:DropDownList     id="DropDownList1"#
15:                                   style="Z-INDEX: 101; LEFT: 24px; POSITION: absolute; TOP: 120px"
16:                                   runat="server">
17:               </asp:DropDownList>
18:               <asp:Label            id="Label1"
19:                                   style="Z-INDEX: 102; LEFT: 24px; POSITION: absolute; TOP: 32px" 
20:                                   runat="server"
21:                                   Width="376px" 
22:                                   Font-Bold="True">Beispiel zur dynamischen Erzeugung von WebControls
23:               </asp:Label>
24:               <asp:Label             id="Label2" 
25:                                   style="Z-INDEX: 103; LEFT: 24px; POSITION: absolute; TOP: 72px" 
26:                                   runat="server"
27:                                   Width="579px"
28:                                   Height="24px">Bitte wählen Sie ein WebControl in der DropDownList aus und klicken Sie auf den Button.
29:               </asp:Label>
30:               <asp:Button         id="Button1" 
31:                                   style="Z-INDEX: 104; LEFT: 200px; POSITION: absolute; TOP: 120px" 
32:                                   runat="server"
33:                                   Width="48px" 
34:                                   Height="24px" 
35:                                   Text="Button">
36:               </asp:Button>
37:               <table                 style="Z-INDEX: 104; LEFT: 24px; POSITION: absolute; TOP: 150px" 
38:                                   cellpadding="0"
39:                                   cellspacing="0">
40:                   <tr>
41:                       <td>
42:                           <asp:PlaceHolder     id="PlaceHolder1" 
43:                                               runat="server">
44:                           </asp:PlaceHolder>
45:                       </td>
46:                   </tr>
47:               </table>
48:           </form>
49:       </body>
50:   </HTML>

Der Code der zugehörigen CodeBehind-Datei:

 
1:   public class _default : System.Web.UI.Page
2:   {
3:       protected System.Web.UI.WebControls.DropDownList DropDownList1;
4:       protected System.Web.UI.WebControls.Label Label1;
5:       protected System.Web.UI.WebControls.Label Label2;
6:       protected System.Web.UI.WebControls.Button Button1;
7:       protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;
8:       ICollection CreateDataSource() 
9:       {
10:           DataTable dt new DataTable();
11:           DataRow dr1;
12:           DataRow dr2;
13:           DataRow dr3;
14:  
15:           dt.Columns.Add(new DataColumn("IntegerValue"typeof(Int32)));
16:           dt.Columns.Add(new DataColumn("ControlType"typeof(string)));
17:  
18:           dr1 dt.NewRow();
19:           dr1[0] = 1;
20:           dr1[1] = "DropDownList";
21:  
22:           dr2 dt.NewRow();
23:           dr2[0] = 2;
24:           dr2[1] = "Label";
25:  
26:           dt.Rows.Add(dr1);
27:           dt.Rows.Add(dr2);
28:  
29:           DataView dv new DataView(dt);
30:           return dv;
31:       }
32:  
33:       private void Page_Load(object senderSystem.EventArgs e)
34:       {
35:           if(!IsPostBack)
36:           {
37:               DropDownList1.DataSource CreateDataSource();
38:               DropDownList1.DataTextField "ControlType";
39:               DropDownList1.DataValueField "IntegerValue";
40:               DropDownList1.DataBind();
41:               }
42:           }
43:  
44:       private void Button1_Click(object senderSystem.EventArgs e)
45:       {
46:           switch(int.Parse(DropDownList1.Items[DropDownList1.SelectedIndex].Value.ToString()))
47:           {
48:               case 1:
49:                   PlaceHolder1.Controls.Clear();
50:                   DropDownList DDLDynamic new DropDownList();
51:                   DDLDynamic.DataSource CreateDataSource();
52:                   DDLDynamic.DataTextField "ControlType";
53:                   DDLDynamic.DataValueField "IntegerValue";
54:                   DDLDynamic.DataBind();
55:                   PlaceHolder1.Controls.Add(DDLDynamic);
56:                   break;
57:               case 2:
58:                   PlaceHolder1.Controls.Clear();
59:                   Label LBLDynamic new Label();
60:                   LBLDynamic.Text "Hello World! - dynamisch erzeugt";
61:                   PlaceHolder1.Controls.Add(LBLDynamic);
62:                   break;
63:           }
64:       }
65:   }