如何引用动态创建的控件
本文关键字:动态 创建 控件 引用 何引用 | 更新日期: 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);