Reputation: 6810
I have a user control that contains a repeater. It seems that data cannot be assigned to it's DataSource property, I have tried a few different data sources but the following error is displayed: (I have debugged it and there are data items in the datasource)
Object reference not set to an instance of an object
Here's the aspx for the repeater:
<asp:Repeater ID="repeater1" runat="server" >
<HeaderTemplate>
<ul>
</HeaderTemplate>
<ItemTemplate>
<li>
<%# Eval("Name") %>
</li>
</ItemTemplate>
<FooterTemplate>
</ul>
</FooterTemplate>
</asp:Repeater>
I create an instance of the user control in the code behind of the file I want to display the repeater in - I can't type repeater1.DataSource and assign it in that page so I added an attribute to the user control which takes IEnumerable as the datasource.
Any ideas why this isn't working?
Upvotes: 2
Views: 2501
Reputation: 62564
You should do such things in the DataBind()
method like shown below:
public override void DataBind()
{
this.repeater.DataSource = ...
this.repeater.DataBind();
...
}
So it will bind whilst parent page calling Page.DataBind()
as well
Use this method to bind data from a source to a server control. This method is commonly used after retrieving a dataset through a database query. Most controls perform data binding automatically, which means that you typically do not need to call this method explicitly.
Upvotes: 3
Reputation: 136
Try this: Inside the user controls where is the repeater located, in the OnLoad() method
do this :
repeater1.DataSource = MyIEnumerableProperty;
repeater1.DataBind();
Upvotes: 2