Why is e.Item.DataItem null on ItemDataBound event when binding an asp:net Repeater to a Collection?

Tomas Vinter picture Tomas Vinter · Apr 12, 2010 · Viewed 13.3k times · Source

I'm trying to bind a collection implementing the ICollection, IEnumerable and IList interface to an asp.net repeater. The Collection is named CustomCollection. So I'm setting the datasource of the repeater to the collection, as follows:

rptRepeater.DataSource = customCollection;
rptRepeater.Databind();

Then, on the ItemDataBound event, I'm trying to access the DataItem object, as follow:

void rptRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e){

object obj = e.Item.DataItem; // DataItem is null for some reason

}

For some reason the e.Item.DataItem object is null. Do anyone know why this is, and/or what I could do to get hold of the object in the collection that is to be databound to the repeater?

Thanx!

Answer

Oded picture Oded · Apr 12, 2010

In your ItemDataBound event handler, you need to check that it is not trying to bind to a header or footer template:

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) {
    object obj = e.Item.DataItem;
}