Dynamische WebControls

Written on September 17, 2003

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:

4:

5:

default

6:

7:

8:

9:

10:

11:

12:

13:

14:

17:

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:

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:

30:

36:

37:

40:

41:

42:

44:

45:

46:

47:

48:

49:

50:

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 sender, System.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 sender, System.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: }