Cant bind Repeater to Custom Collection

A

A Traveler

Hi,

I have a custom collection class i wrote, LineItemsCollection, which is a
strongly typed collection of objects of my LineItem class.
The LineItem class is a simple class with just a couple properties, ProdID,
Description, Quantity and UPC. 3 strings and a long.
The LineItemsCollection class inherits from
System.Collections.Specialized.NameObjectCollectionBase.
It also implements both IEnumerable and IList.

I can bind a DataGrid to my collection with no problem. In the
ItemCreated/ItemDataBound, the value of e.Item.DataItem is properly returned
as a LineItem object. So i can do <%#
DataBinder.Eval(Container,"DataItem.Quantity") %> and get back a quantity.

However, if i try to bind to a Repeater, and i do the same thing, i get an
error "DataBinder.Eval: 'System.String' does not contain a property with the
name Quantity." I had had this problem with the datagrid when i first made
my collection. After researching, i found out to inherit from IList, and it
fixed it. But apparently the Repeater does its databinding differently than
the DataGrid?

Can anyone explain what the Repeater needs differently than the Datagrid in
order to bind to a custom collection??

Thanks in advance,
- Arthur Dent.
 
K

Karl Seguin

You might want to consider having your base class inherit from
CollectionBase which will give you all the necessary flexability (not to
mention allow you to bind to everything).

Also, try the following syntax in your repeater:

<%# ((LineItem)Container.DataItem).Quantity %>
or in vb
<%# ctype(Container.DataItem, LineItem).Quantity %>

not sure if it'll sovle the problem though....

you'll likely need to import the namespace of LineItem in your page with:
<%@ Import Namespace="NamespaceContainerLineItem" %>

Karl
 
A

A Traveler

Yeah, that worked. I changed it to CollectionBase instead of
NameObjectCollectionBase, and that apparently fixed it. Im not quite sure
why though, because if i look at all the interfaces and bases in the
objectbrowser, its all the same. At any rate it works now.

I didnt want to do a hard-coded cast in the repeater code simply to keep it
generic and usable for other collection types.

Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,048
Latest member
verona

Latest Threads

Top