By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,924 Members | 1,861 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,924 IT Pros & Developers. It's quick & easy.

Cant bind Repeater to Custom Collection

P: n/a
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.NameObjectCollectio nBase.
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.
Nov 18 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
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

--
MY ASP.Net tutorials
http://www.openmymind.net/
"A Traveler" <hi*********************@yahoo.com> wrote in message
news:OJ**************@TK2MSFTNGP11.phx.gbl...
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.NameObjectCollectio nBase.
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.

Nov 18 '05 #2

P: n/a
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.
"Karl Seguin" <karl REMOVE @ REMOVE openmymind REMOVEMETOO . ANDME net>
wrote in message news:ef**************@TK2MSFTNGP10.phx.gbl...
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

--
MY ASP.Net tutorials
http://www.openmymind.net/
"A Traveler" <hi*********************@yahoo.com> wrote in message
news:OJ**************@TK2MSFTNGP11.phx.gbl...
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.NameObjectCollectio nBase.
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.


Nov 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.