2

当用户单击按钮或更改选定的单选按钮时,有没有办法引用动态创建的控件,例如几个 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。将 EventHandlers 添加到文本框对我没有好处,因为我需要将所有三个值都插入到数据库中。

我最初的想法是以某种方式将 texboxes 的引用传递给 rbList_SelectedIndexChanged 事件,但我不确定如何执行此操作,甚至更不确定它是否会起作用。

任何帮助,将不胜感激。

4

3 回答 3

5

我认为您可以使用FindControl(). 您需要在代码隐藏中为这些文本框设置一个 ID。

PlaceHolder1您可能在rbList_SelectedIndexChanged事件中有参考。所以在事件中:

var TextBox1 = (TextBox)Placeholder1.FindControl("{text box 1 ID here}");
var TextBox2 = (TextBox)Placeholder1.FindControl("{text box 2 ID here}");
于 2013-05-16T16:41:26.153 回答
2

创建一个 UserControl 来封装这些控件。将一些逻辑放入其中以根据它们的值保存两个控件。将此用户控件添加到 PlaceHolder。 查看这篇文章以进一步阅读

于 2013-05-16T16:49:22.470 回答
1

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

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

rbList.SelectedIndexChanged += (s, e) =>selectionChangedHandler(rbList t1, t2);
于 2013-05-16T16:41:32.193 回答