Добавление элементов управления в коллекцию элементов управления с панели обновлений
После этих двух потоков: Как я могу создать массив элементов управления в C#.NET? Не удается получить доступ к элементам управления внутри UpdatePanel
У меня тока есть это:
ControlCollection[] currentControlsInUpdatePanel = new ControlCollection[upForm.Controls.Count];
foreach (Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls)
{
currentControlsInUpdatePanel.
}
У currentControlsInUpdatePanel нет метода добавления или вставки. почему первая ссылка, которую я публикую, позволяет этому пользователю добавить в свою коллекцию. Это то, что я хочу сделать, найти все элементы управления в моей панели обновлений upForm. но я не вижу, как я могу добавить его в свою коллекцию элементов управления.
3 ответа
Я не думаю, что этот код имеет смысл. Вы создаете массив объектов 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, вам нужно будет использовать значение индекса для установки ваших объектов в массиве.
Пример:
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];
}
Попробуй использовать
ControlCollection collection = ((UpdatePanel)upForm).ContentTemplateContainer.Controls;
Это дает вам все элементы управления в этой коллекции элементов управления. Оттуда вы можете использовать CopyTo, чтобы скопировать его в нужный вам массив:
Control[] controls = new Control[collection.Length];
collection.CopyTo(controls , 0);
UpdatePanel
Коллекция дочерних элементов управления - это специальная коллекция, которая содержит только один дочерний элемент управления: его контейнер шаблонов. Именно тогда этот элемент управления содержит все дочерние элементы управления UpdatePanel
(такой как GridView
или же Button
).
Как отмечается в других вопросах, связанных с этим вопросом, рекурсивная прогулка по дереву дочерних элементов управления - лучший путь. Затем, когда вы нашли место, к которому нужно добавить элементы управления, позвоните Controls.Add()
в этом месте.
Мое предложение будет другим подходом: разместить <asp:PlaceHolder>
контроль в UpdatePanel
и дать ему имя и добавить к нему элементы управления. Не должно быть никаких особых преимуществ для доступа к коллекции элементов управления UpdatePanel
само по себе, и тогда вам не придется копаться в деталях реализации элементов управления (которые, хотя они вряд ли изменятся, могут значительно затруднить чтение кода).