2016-12-02 3 views
1

У меня есть Placeholder и я динамически созданный panel в placeholder, у меня есть некоторые динамически добавлены кнопки радио в панели, теперь я могу использовать findControl() найти радио кнопки, если они прямые дети placeholder.Использование FindControl найти дочерний элемент

Я буквально провел весь вчерашний день, пытаясь найти их, когда они являются дочерними элементами Panel. Как есть способ сделать это?

Вот мой код ниже:

PlaceHolder1.Controls.Add(myPanel); //add the panel to the placeholderenter code here 
myPanel.Controls.Add(myRadioButton); //add the radiobutton to the panel 
+1

это было предложено, что вы ищете рекурсивный [ 'FindControl()'] (http://stackoverflow.com/questions/4955769/better-way-to-find-control-in-asp- сеть) –

ответ

0

Вы должны сделать метод, который рекурсивно ищет для элемента управления, используя его Id. Это означает, что метод будет искать элемент управления внутри (в вашем случае) заполнителя. Если метод обнаружит контроль, он вернет его. Если нет, он будет искать субподрядчик каждого заполнителя, идя «глубже». И потом, если ничего не найдено, он будет искать еще один уровень вниз, в субэлемента каждого PlaceHolder субэлементов и т.д.)

private Control FindControl(string ctlToFindId, Control parentControl) 
{ 
    foreach (Control ctl in parentControl.Controls) 
    { 
     if (ctl.Id == ctlToFindId) 
      return ctl; 
    } 

    if (ctl.Controls != null) 
    { 
     var c = FindControl(ctlToFindId, ctl); 
     if (c != null) return c; 
    } 

    return null; 
} 

, а затем использовать его как это:

Control ctlToFind = FindControl(myRadioButton.Id, Placeholder1); 
if (ctlToFind != null) 
{ 
    //your radibutton is found, do your stuff here 
} 
else 
{ 
    // not found :(
} 
0

Finding управление рекурсивным является вариант, но он также имеет пару down-sides.

Если вы знаете идентификаторы всех элементов управления, вы можете просто использовать FindControl

RadioButtonList myRadioButton = PlaceHolder1.FindControl("Panel1").FindControl("RadioButtonList1") as RadioButtonList; 
Label1.Text = myRadioButton.SelectedValue; 

Но вы должны дать ваши динамически добавляемые элементы управления идентификатор.

Panel myPanel = new Panel(); 
myPanel.ID = "Panel1"; 

RadioButtonList myRadioButton = new RadioButtonList(); 
myRadioButton.ID = "RadioButtonList1"; 

PlaceHolder1.Controls.Add(myPanel); 
myPanel.Controls.Add(myRadioButton); 
Смежные вопросы