Добавление элементов управления в коллекцию элементов управления с панели обновлений

После этих двух потоков: Как я могу создать массив элементов управления в 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 само по себе, и тогда вам не придется копаться в деталях реализации элементов управления (которые, хотя они вряд ли изменятся, могут значительно затруднить чтение кода).

Другие вопросы по тегам