2013-03-31 5 views
1

После этих двух потоков: How can I create an Array of Controls in C#.NET? Cannot Access the Controls inside an UpdatePanelДобавление элементов управления в коллекции элементов управления из панели обновления

I ток есть это:

ControlCollection[] currentControlsInUpdatePanel = new ControlCollection[upForm.Controls.Count]; 
foreach (Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls) 
{ 
    currentControlsInUpdatePanel. 
} 

currentControlsInUpdatePanel не имеет надстройку или вставить метод. почему первая ссылка i post позволяет этому пользователю .add в его коллекции. Это то, что я хочу сделать, найти все элементы управления в моей панели обновления upForm. но я не вижу, как я могу добавить его в свою коллекцию элементов управления.

ответ

0

Я не думаю, что этот код имеет смысл. Вы создаете массив объектов ControlCollection и пытаетесь сохранить в нем объекты Control. Кроме того, поскольку currentControlsInUpdatePanel-объект является массивом, на этом объекте не будет метода Add().

Если вы хотите использовать метод Add(), попробуйте создать currentControlsInUpdatePanel как объект List.

Пример:

List<Control> currentControlsInUpdatePanel = new List<Control>(); 
foreach(Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls) 
{ 
    currentControlsInUpdatePanel.Add(ctl); 
} 

Если вы хотите продолжать использовать массив для хранения объектов управления, вам нужно будет использовать значение индекса, чтобы установить свои объекты в массиве.

Пример:

Control[] currentControlsInUpdatePanel = new Control[((UpdatePanel)upForm).ContentTemplateContainer.Controls.Count]; 
for(int i = 0; i < upForm.Controls.Count; i++) 
{ 
    currentControlsInUpdatePanel[i] = ((UpdatePanel)upForm).ContentTemplateContainer.Controls[i]; 
} 
0

Коллекция дочерних элементов управления UpdatePanel является специальной коллекцией, которая содержит только один дочерний элемент управления: его контейнер-шаблон. Затем управляет, который содержит все дочерние элементы управления UpdatePanel (например, GridView или Button).

Как указано в других вопросах, связанных с этим вопросом, рекурсивно ходить по дереву управления детьми - это лучший способ пойти. Затем, когда вы нашли место, в которое вам нужно добавить элементы управления, позвоните Controls.Add() в этом месте.

Мое предложение было бы другим подходом: поместите управление <asp:PlaceHolder> в поле UpdatePanel и дайте ему имя и добавьте элементы управления к нему. Не должно быть никакого особого преимущества для доступа к коллекции управления самим UpdatePanel, и тогда вам не придется копать детали реализации элементов управления (которые, хотя они вряд ли изменятся, могут сделать код намного сложнее для чтения) ,

0

Попробуйте использовать

ControlCollection collection = ((UpdatePanel)upForm).ContentTemplateContainer.Controls; 

Это дает вам все элементы управления в этой коллекции элементов управления. Оттуда вы можете использовать CopyTo, чтобы скопировать его в нужный массив:

Control[] controls = new Control[collection.Length]; 
collection.CopyTo(controls , 0); 
Смежные вопросы