Как серверный элемент управления в шаблоне может быть чувствительным к контексту данных? - PullRequest
3 голосов
/ 26 января 2010

Допустим, элемент управления X имеет шаблон с именем RowTemplate.

Таким образом, разметка X будет выглядеть так:

<foo:X>
    <RowTemplate>
        <foo:Y>...</foo:Y>
    </RowTemplate>
</foo:X>

Мой вопрос: Как может Y-элемент управления быть чувствительным к контексту данных ? Я знаю, что могу использовать встроенные теги шаблона для получения доступа к контексту данных: <%# Eval("Id") %>, но я не могу передать эту информацию Y, поскольку встроенные теги шаблона не разрешены в элементах управления сервером.

Так что я не знаю, как я мог бы использовать Идентификатор объекта (Eval ("Id")) в Y.

1 Ответ

1 голос
/ 26 января 2010

Добавив обработчик в событие ItemDataBound (или другое подобное событие в элементе управления foo: X), вы можете получить доступ к элементам управления в шаблоне строки. Мой пример кода взят из DataList, поэтому ваши обработчики событий, вероятно, будут другими.

В коде позади - подключите обработчик события:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    foo.ItemDataBound += new DataListItemEventHandler(foo_ItemDataBound);
}

Затем в обработчике событий получите доступ к элементам управления в вашей строке. Возможно, ваши данные не являются DataRow, поэтому при необходимости измените их.

void foo_ItemDataBound(object sender, DataListItemEventArgs e)
{
    Control fooY = (e.Item.FindControl("foo:Y") as Control); //Replace foo:Y with the ID for foo:Y
    DataRow data = e.Item.DataItem as DataRow;
    fooY.SomeProperty = data["id"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...