如何引用动态创建的控件

本文关键字:动态 创建 控件 引用 何引用 | 更新日期: 2023-09-27 18:14:01

是否有一种方法可以引用动态创建的控件,例如一对textbox和一个RadioButtonList,当用户单击按钮或更改所选的单选按钮时。

我需要插入一个记录到数据库中,但我需要所有的值。我不能硬编码这些控件,因为它们必须在运行中创建。

TextBox t1 = new TextBox();
PlaceHolder1.Controls.Add(t1);
TextBox t2 = new TextBox();
PlaceHolder1.Controls.Add(t2);
RadioButtonList rbList = new RadioButtonList();
rbList.Items.Add(new ListItem("Today", "1"));
rbList.Items.Add(new ListItem("This Week", "2"));
rbList.SelectedIndexChanged += new EventHandler(rbList_SelectedIndexChanged);
PlaceHolder1.Controls.Add(rbList);

我需要在rbList_SelectedIndexChanged或其他事件中引用两个文本框和RadioButtonList。将eventhandler添加到文本框中没有任何好处,因为我需要将所有三个值插入到数据库中。

我最初的想法是以某种方式将文本框的引用传递给rbList_SelectedIndexChanged事件,但我不确定如何做到这一点,甚至更不确定它是否会工作。

如何引用动态创建的控件

我认为您可以使用FindControl()完成此任务。您需要在后面的代码中为这些文本框设置一个ID。

您可能在rbList_SelectedIndexChanged事件中有对PlaceHolder1的引用。所以在事件中:

var TextBox1 = (TextBox)Placeholder1.FindControl("{text box 1 ID here}");
var TextBox2 = (TextBox)Placeholder1.FindControl("{text box 2 ID here}");

创建UserControl来封装这些控件。在里面放入一些逻辑,根据两个控件的值来保存它们。将此用户控件添加到占位符。查看本文进一步阅读

我最初的想法是以某种方式将文本框的引用传递给bList_SelectedIndexChanged事件

这就是我要做的。这很容易通过使用事件处理程序的匿名方法来完成,该方法可以关闭所需的变量:

rbList.SelectedIndexChanged += (s, e) =>selectionChangedHandler(rbList t1, t2);