0

我正在使用数据列表来显示动态生成的控件,每个控件都在其各自的用户控件中,并且我在数据列表项模板中使用了该用户控件

 <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 赋予文本框,并且在 datalist 中动态生成此文本框后,id 更改为 txt+“列名”,例如。txtCaseCD 在属性提示的帮助下

现在,当我想访问文本框 txtCaseCD 时,我得到对象引用错误或 null

4

1 回答 1

1

我不确定您如何尝试访问您的控件,但以下方法将保证您成功。首先找到您的用户控件。然后在用户控件内向下钻取到所需的文本框。

  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

      }

 }
 }

让我知道这是否适用于您的设置。

于 2013-07-26T08:09:46.610 回答