2013-07-26 24 views
0

我使用的是數據列表用於顯示動態生成的控制內文本框, 每個控制是在其各自的用戶控件,我已經在數據列表項模板使用的用戶控制在訪問動態創建一個用戶控件,其是在一個DataList

<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> 

在usercontrol中,我爲文本框提供了id作爲txtName,並且在datalist中動態生成此文本框後,id變爲txt +「列名」 例如。 txtCaseCD財產提示的幫助

現在,當我要訪問的文本框txtCaseCD我得到的對象引用錯誤或空

+0

看看ASP.Net生命週期:http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx –

回答

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 

     } 

} 
} 

讓我知道這是否適用於您的設置。

+0

感謝您的回覆,但我已填充datalist上的按鈕點擊,所以在這種情況下,我不得不使用dlCriteriaControl.Items不Item.Note:可以有任何沒有。項目(usercontrols)生成。 – Anuj

相關問題