2013-07-26 3 views
0

Я использую DataList для показа динамически создаваемых элементов управления, каждый элемент управления находится в соответствующем UserControl и я использовал этот пользовательский элемент управления в в шаблоне DataList пунктдоступа динамически созданные TextBox в UserControl, который находится в 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 идентификатор меняет на 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 not Item.Note: может быть любой нет. создаваемых элементов (usercontrols). – Anuj