2013-06-28 2 views
0

Я пытаюсь выполнить итерацию всех элементов управления внутри моей страницы, которая содержит ajaxtoolkit: tabcontainer с несколькими ajaxtoolkit: tabpanel s. Я пытаюсь сделать это рекурсивно, например:Получить все элементы управления внутри AjaxControlToolkit.TabPanel programatically

protected override void AddedControl(Control control, int index) 
{ 
    base.AddedControl(control, index); 
    ParseControls(control); 
} 

public void ParseControls(Control control) 
{ 
     foreach (Control myControl in control.Controls) 
     { 
      ParseControls(myControl); 

      if(myControl.GetType().ToString().ToLower() == "AjaxControlToolkit.TabPanel".ToLower()) 
      { 
       AjaxControlToolkit.TabPanel tabPanel = (AjaxControlToolkit.TabPanel)myControl; 
       Response.Write("tabpanel id is:" + tabPanel.ID + " |tab panel no of controls:" + tabPanel.Controls.Count.ToString() + "<br />"); 
      } 

     } 
} 

Моя проблема в том, что всякий раз, когда я нахожу TabPanel я не могу перебирать свою коллекцию управления, потому что TabPanel.Controls.Count всегда возвращает 0, хотя на странице ASPX Я добавил текстовые поля, ярлыки и так далее. Я также пробовал искать элемент внутри TabPanel с помощью метода FindControl, но это не помогло мне.

 HtmlTable tbl = (HtmlTable)tabPanel.FindControl("tblContent"); 

Может кто-нибудь указать мне, что мне не хватает? Спасибо!

+0

Если вы просто получить доступ к вашему 'TabContainer' непосредственно в коде вы можете перебирать его панелей? –

+0

Такая же проблема, я пробовал и так. Он видит TabPanels, но никаких элементов управления внутри них нет. – Crista23

ответ

0

Я боролся с той же проблемой. Вот мое решение.

Вкратце, что он делает. Это будет охватывать все элементы управления на вашей странице. Вы можете просто передать любой тип контроля. Страница или только таблоконтейнер для функции. Затем проверьте, является ли элемент управления TabPanel. Если это так. Сначала проанализируйте его в TabPanel, а затем выберите элементы управления. Надеюсь, что это помогает

 private void IterateControls(Control ctrl) 
    { 
     foreach (Control item in ctrl.Controls) 
     { 
      if (item is AjaxControlToolkit.TabPanel) 
      { 
       TabPanel tp = item as TabPanel; 
       foreach (Control tpControls in tp.Controls) 
       { 
        IterateControls(tpControls); 
       } 
      } 
      else 
       if (item.Controls.Count > 1) 
       { 

        IterateControls(item); 
       } 
       else 
       { 
        if (item.GetType() == typeof(DropDownList)) 
        { 
         DropDownList dl = item as DropDownList; 
         //do something 

        } 
        else if (item.GetType() == typeof(TextBox)) 
        { 

         TextBox txt = item as TextBox; 
         if (txt.ID == "testControlID") 
         { 
          //IT WORKS!! 
         } 
         //do something 
        } 
       } 
     } 

    } 

Вы можете просто вызвать функцию как этот

IterateControls(Page); 
Смежные вопросы