Поиск определенного элемента управления из ControlCollection с помощью LINQ или любым быстрым способом - PullRequest
1 голос
/ 31 мая 2011

У меня есть набор коллекций элементов управления, и я ищу способ добавить определенный элемент управления по идентификатору, добавленному во время выполнения, есть ли быстрый и оптимизированный способ сделать это?

Вот код:

HtmlTableRow row = new HtmlTableRow();
row.ID = string.Format("tr{0}", key);
tableParameters.Rows.Add(row);

HtmlTableCell cellParameterName = new HtmlTableCell();
cellParameterName.ID = string.Format("td{0}", key);
row.Cells.Add(cellParameterName);

Label lblParameterName = new Label();
lblParameterName.ID = string.Format("lblParameter{0}", key);
cellParameterName.Controls.Add(lblParameterName);
lblParameterName.Text = key + ":";

HtmlTableCell cellParameterSelectionControl = new HtmlTableCell();
cellParameterSelectionControl.ID = string.Format("tdSelectionControl{0}", parameterInfos[key].ParameterName);
row.Cells.Add(cellParameterSelectionControl);

Thanx

1 Ответ

3 голосов
/ 31 мая 2011

А как насчет Control.FindControl?

Предположим, ваш идентификатор таблицы tableExample:

var tr = tableExample.FindControl("tr5");

Но помните, что это не рекурсивно. Итак, если вы хотите получить lblParameter5, вы можете сначала найти каждого родителя до этого элемента:

var tr = tableExample.FindControl("tr5") as HtmlTableRow;
var td = tr.FindControl("td5") as HtmlTableCell;
var lbl = td.FindControl("lblParemeter5") as Label;

Или вы можете создать рекурсивную функцию, которая сделает это за вас. Вот пример использования методов расширения для создания этой рекурсивной функции:

public static class MyExtensions
{
    public static Control FindById(this Page p, string id)
    {
        return FindControlRecursive(p, id);
    }

    private static Control FindByIdRecursive(Control root, string id)
    {
        if (root.ID == id)
            return root;

        foreach (Control c in root.Controls)
        {
            Control c2 = FindByIdRecursive(c, id);
            if (c2 != null)
                return t;
        }

        return null;
    }

}

Итак, ваш звонок просто будет:

var lbl = FindById("lblParameter5") as Label;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...