访问DataList中用户控件内动态创建的TextBox
本文关键字:动态 创建 TextBox 控件 DataList 用户 访问 | 更新日期: 2023-09-27 18:24:57
我使用数据列表来显示动态生成的控件,每个控件都在其各自的用户控件中,我已经在数据列表项目模板中使用了该用户控件
<asp:DataList ID="dlCriteriaControl" runat="server" RepeatColumns="2" OnItemDataBound="dlCriteriaControl_ItemDataBound">
<ItemTemplate>
<%--<uc3:ucDatepicker ID="ucDatepicker1" runat="server" />
<uc2:ucRadComboBox ID="ucRadComboBox1" runat="server" />--%>
<uc1:ucTextBox ID="ucTextBox1" runat="server" Text='<%# Bind("Column_Name") %>' Prompt='<%# Bind("Column_Prompt") %>' />
<uc3:ucDatepicker ID="ucDatePicker1" runat="server" Text='<%# Bind("Column_Name") %>'
Prompt='<%# Bind("Column_Prompt") %>' />
<asp:HiddenField ID="hdnStatus" runat="server" Value='<%# Bind("Control_Display") %>' />
</ItemTemplate>
</asp:DataList>
在用户控制中,我将文本框的id作为txtName,在数据列表中动态生成该文本框后,id将更改为txt+"列名"例如,txtCaseCD在属性提示的帮助下
现在,当我想访问文本框txtCaseCD时,我得到对象引用错误或空
我不确定您是如何尝试访问您的控件的,但以下方法将保证您的成功。首先找到您的用户控件。然后在用户控件中向下搜索到所需的文本框。
protected void DataList_ItemDataBound(Object sender,DataListEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
ucTextBox myTextControl=(ucTextBox)e.Item.FindControl("ucTextBox1");
if (myTextControl!= null)
{
TextBox txtCaseCD=(TextBox)myTextControl.Find("txtCaseCD");
//now you can use txtCaseCD without a null reference error
}
}
}
请告诉我这是否适用于您的环境。