Ошибка DataBinder.Eval в asp.net - PullRequest
       29

Ошибка DataBinder.Eval в asp.net

0 голосов
/ 04 ноября 2011

Я создал класс, выполняющий некоторые задания, такие как GridView, наследуемый от System.Web.UI.WebControls.WebControl.

public class IHGridView : System.Web.UI.WebControls.WebControl
{
    // inside here, actually return Repeater class.


    protected override void OnInit(EventArgs e)
    {
        _repeater.ItemTemplate = new IHGridItemTemplate(ListItemType.Item, this.Columns);
        this.Controls.Add(_repeater);
    }
}

Я также создал ItemTemplate для моего повторителя в IHGridView.

public class IHGridItemTemplate : ITemplate
{
}

Класс IHGridView возвращает Repeater и некоторые html-коды, но для удобства я создал некоторые вещи.

public class Columns : StateManagedCollection
{
}

public class IHBoundFieldBase : IStateManager
{
}

public class IHLabelField : IHBoundFieldBase
{
}

Теперь в моем aspx я могу использовать это, как показано ниже:

<cc1:IHGridView ID="IHGridView1" runat="server" EditMode="View">
    <Columns>
         <cc1:IHLabelField ID="IHLabelField7" DataField="PERSON_NAME" HeaderText="PersonName" />
    </Columns>
</cc1:IHGridView>

Теперь у меня возникла проблема.Я не могу использовать DataBinder.Eval в aspx.

<cc1:IHLabelField ID="IHLabelField7" HeaderText="PersonName" Text='<%# DataBinder.Eval(Container.DataItem, "PERSON_NAME") %>' />

Это дает мне ошибку.Ниже приведено сообщение об ошибке: CS1061: в «System.Web.UI.Control» отсутствует определение «DataItem».В первом аргументе System.Web.UI.Control отсутствует расширяемый метод DataItem.Пожалуйста, проверьте, если есть использование рубрики или ссылки на сборку.Это было написано на корейском языке, но я перевел на английский.Кто-нибудь может дать мне подсказку, чтобы решить эту проблему?

Ответы [ 2 ]

1 голос
/ 04 ноября 2011

В шаблонных элементах управления шаблон создается в контейнере.Чтобы привязка данных работала в шаблонных полях, в контейнере рекомендуется реализовать интерфейс IDataItemContainer - реализация интерфейса должна предоставлять элемент данных.

AFAIK для поддержки выражений привязки данных, Парсер ASP.NET внедряет обработчик для события DataBinding для элемента управления (чьи свойства используют эти выражения), а затем в обработчике генерирует код, который ищет элемент данных в контейнере.

Итак, в вашемНапример, если вы хотите использовать выражение привязки данных в свойстве IHLabelField.Text, тогда контейнер именования элемента управления должен либо реализовать IDataItemContainer, либо иметь свойство DataItem.Так что в этом случае вам, вероятно, понадобится DataItem на IHGridView элементе управления - и он не будет работать так, как вы хотите.

0 голосов
/ 14 марта 2017

вот пример, который мы использовали. я надеюсь, что это поможет

   <asp:HyperLink ID="phoneManagementHyperLink" runat="server" Text='<%# (Container.DataItem as WcfUser).firstName + " " + (Container.DataItem as WcfUser).lastName%>'
...