Как заставить Eval работать в настраиваемом элементе управления с привязкой к базе данных - PullRequest
0 голосов
/ 29 сентября 2010

Контекст

Я собираю шаблонный элемент управления с привязкой к данным. В настоящее время он работает со следующим синтаксисом ...

<cc:ItemChooserControl ID="ItemChooser" runat="server">
    <TitleTemplate>
        <h4><%# DataBinder.Eval(Container.DataItem, "DisplayName") %></h4>
    </TitleTemplate>
</cc:ItemChooserControl>

Задача

Хотелось бы, чтобы вместо этого работал более короткий и простой Eval.

<h4><%# Eval("DisplayName") %></h4>

Однако при использовании прямой Eval я получаю ошибку:

Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.

код

Я привязываю данные к пользовательскому HtmlTableCell ...

public class TitleTemplateTableCell: HtmlTableCell, INamingContainer
{
    private object m_DataItem;

    public virtual object DataItem
    {
        get { return m_DataItem; }
        set { m_DataItem = value; }
    }
}

Со следующей настраиваемой привязкой данных (несвязанный код удален) ...

foreach (object dataItem in dataSource) {
    TitleTemplateTableCell title = new TitleTemplateTableCell();
    TitleTemplate.InstantiateIn(title);    // TitleTemplate is the template property
    title.DataItem = dataItem;
    title.DataBind();
 }

1 Ответ

0 голосов
/ 30 сентября 2010

Ячейка HtmlTable принадлежит к HtmlContainerControl, который не наследуется от общего DataBoundControl, который делают другие элементы управления данными, такие как GridView. Следовательно, вы получаете эту ошибку; это не DataBoundControl.

...