ASP.NET Repeater Пользовательский элемент управления DataSource - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть пользовательский элемент управления, который содержит повторитель. Кажется, что данные не могут быть присвоены его свойству DataSource, я пробовал несколько разных источников данных, но отображается следующая ошибка: (Я отладил их, и в источнике данных есть элементы данных)

Object reference not set to an instance of an object

Вот aspx для повторителя:

<asp:Repeater ID="repeater1" runat="server" >
    <HeaderTemplate>
        <ul>
    </HeaderTemplate>
        <ItemTemplate>
            <li>
                <%# Eval("Name") %>
            </li>
        </ItemTemplate>
    <FooterTemplate>
            </ul>
    </FooterTemplate>
</asp:Repeater>

Я создаю экземпляр пользовательского элемента управления в коде позади файла, в котором я хочу отобразить повторитель - я не могу набрать repeater1.DataSource и назначить его на этой странице, поэтому я добавил атрибут в пользовательский элемент управления, который принимает IEnumerable в качестве источника данных.

Есть идеи, почему это не работает?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Вы должны делать такие вещи в методе DataBind(), как показано ниже:

public override void DataBind()
{
   this.repeater.DataSource = ...
   this.repeater.DataBind();
   ...
}

Таким образом, он будет связываться, пока родительская страница вызывает также Page.DataBind()

ControlМетод .DataBind :

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

2 голосов
/ 29 сентября 2011

Попробуйте: внутри пользовательских элементов управления, где расположен повторитель, в методе OnLoad ()

сделайте это:

 repeater1.DataSource = MyIEnumerableProperty;
 repeater1.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...