Как пройти элементы управления в пользовательском элементе управления, чтобы найти определенный элемент управления? - PullRequest
2 голосов
/ 25 февраля 2011

ASP.NET 2.0 Веб-формы

Итак, как вы можете пройти через все элементы управления в пользовательском элементе управления, найти определенный тип элемента управления и добавить к нему событие?

У меня естьПодобный вопрос Как добавить событие в элемент управления ASP.NET при загрузке страницы? , которое касается добавления события, но это не так, если я хотел найти элемент управления.

СЦЕНАРИЙ

Элемент управления представляет собой пользовательский элемент управления:

<asp:Repeater runat="server" ID="options" OnItemDataBound="options_OnItemDataBound">
<HeaderTemplate>
    <table border="0" cellpadding="0" cellspacing="0" width="100%">
        <tr>
</HeaderTemplate>
<ItemTemplate>
            <td>
                <span>
                    <asp:Label runat="server" ID="optionName">
                    </asp:Label>
                    <asp:DropDownList runat="server" ID="optionValues" CssClass="PartOption">
                    </asp:DropDownList>
                </span>
            </td>
</ItemTemplate>
<FooterTemplate>
        </tr>
    </table>
</FooterTemplate>
</asp:Repeater>

Объявление пользовательского элемента управления на пользовательском элементе управления:

<td><def:CustomControl id="somePartOptions" runat="server"></td>

В кодеЗа пользовательским элементом управления я попробовал следующее в событии Page_Load:

    foreach(Control control in partOptions.Controls) {
            FindDropDownControl(control);
}

    protected void FindDropDownControl(Control controlContainer) {
        bool isRepeater = false;
        if (controlContainer is Repeater) {
            isRepeater = true;
        }

        if (controlContainer.HasControls()) {
            foreach (Control subControl in controlContainer.Controls) {
                FindDropDownControl(subControl);
            }
        }
    }

Однако логический флаг всегда ложен.Так что я делаю?В конце концов я хочу найти элемент управления выпадающего списка внутри itemTemplate повторителя, но даже не могу найти повторитель.

спасибо,

1 Ответ

2 голосов
/ 25 февраля 2011

Я использую этот метод для получения списка элементов управления в контейнере (на каждом уровне вложенности):

    public static List<Control> GetControlsByType(Control ctl, Type type)
    {
        List<Control> controls = new List<Control>();

        foreach (Control childCtl in ctl.Controls)
        {
            if (childCtl.GetType() == type)
            {
                controls.Add(childCtl);
            }

            List<Control> childControls = GetControlsByType(childCtl, type);
            foreach (Control childControl in childControls)
            {
                controls.Add(childControl);
            }
        }

        return controls;
    }

Вы можете использовать t следующим образом:

List<Control> repeaters = GetControlsByType(containerControl, typeof (Repeater));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...