Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Datagrid Control > Binding custom objects to datagrid WITHOUT using Collectionbase

Reply
Thread Tools

Binding custom objects to datagrid WITHOUT using Collectionbase

 
 
Rachel Koktava
Guest
Posts: n/a
 
      09-01-2003
Hi

I'm having difficulty bind a collection of custom objects to a
datagrid. For reasons that I'll explain shortly I can't use
Collectionbase, so have instead implemented a custom collection with
the interfaces IList, ICollection and IEnumerable.

This class works find for indexing or iterating (foreach etc), but
when set as the datasource for a web datagrid control it throws an
exception on callinging the datagrids DataBind() method:

[ArgumentNullException: Value cannot be null.
Parameter name: component]
System.ComponentModel.TypeDescriptor.GetProperties (Object
component, Boolean noCustomTypeDesc) +173
System.ComponentModel.TypeDescriptor.GetProperties (Object
component) +7
System.Web.UI.WebControls.BoundColumn.OnDataBindCo lumn(Object
sender, EventArgs e) +95
System.Web.UI.Control.OnDataBinding(EventArgs e) +66
System.Web.UI.Control.DataBind() +26
System.Web.UI.Control.DataBind() +86
System.Web.UI.WebControls.DataGrid.CreateItem(Int3 2 itemIndex,
Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object
dataItem, DataGridColumn[] columns, TableRowCollection rows,
PagedDataSource pagedDataSource) +169
System.Web.UI.WebControls.DataGrid.CreateControlHi erarchy(Boolean
useDataSource) +1408
System.Web.UI.WebControls.BaseDataList.OnDataBindi ng(EventArgs e)
+49
System.Web.UI.WebControls.BaseDataList.DataBind() +23
ASP.test7_aspx.__Render__control1(HtmlTextWriter __output, Control
parameterContainer) in C:\Inetpub\wwwroot\test\test7.aspx:85
System.Web.UI.Control.RenderChildren(HtmlTextWrite r writer) +27
System.Web.UI.Control.Render(HtmlTextWriter writer) +7
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
System.Web.UI.Page.ProcessRequestMain() +1929



I'm assuming (but can't be sure) that this error message is because
the datagrid doesn't know how to bind the custom collection or objects
to its required datastructure. If this is the case I'd appreciate some
advice on how to do this.

If not, then any other help/explanation would be much appreciated.

To elaborate further, the data in question is being retrieved from an
Object Database. Object databases can store the objects in their own
"collections" called sets which provide their own iterators, search,
indexing etcetera. Hence I do not wish to use Collectionbase since
this would require copying the OODB sets into the innerList (the sets
are rather large). Really all I want is a wrapper (and adapter
pattern) that presents these sets as a collection that can be bound to
the datagrid, eg, implementing a custome collection using ICollection,
IList and IEnumerable, but calling the OODB methods for iteration,
indexing etc.

And it must be capably of binding to a datagrid control.

One more thing. At present the implementation is in Managed C++,
(because the OODB API is C++), but solutions in C# are acceptable if
there is no Managed C++ approach that will work.

thanks in advance

Rachel
 
Reply With Quote
 
 
 
 
Ross Donald
Guest
Posts: n/a
 
      09-02-2003
Hi,

As I understand it, the Web DataGrid only supports simple databinding
(through IEnumerable) so when you bind to a custom object it just uses
IEnumerable to get the next object in the collection then uses reflection to
get the value of the property that you have bound. The DataGrid should be
able to deal with null values for the properties.

Does your collection is implement ITypedList or the individual business
objects implement ICustomTypeDescriptor?

There is a KB article (number 316672) that talks about how to handle null
values in a DataGrid Web Control but it is not very helpful.

--
Ross Donald
Rad Software
http://www.radsoftware.com.au/web/WebLog/

"Rachel Koktava" <> wrote in message
news: om...
> Hi
>
> I'm having difficulty bind a collection of custom objects to a
> datagrid. For reasons that I'll explain shortly I can't use
> Collectionbase, so have instead implemented a custom collection with
> the interfaces IList, ICollection and IEnumerable.
>
> This class works find for indexing or iterating (foreach etc), but
> when set as the datasource for a web datagrid control it throws an
> exception on callinging the datagrids DataBind() method:
>
> [ArgumentNullException: Value cannot be null.
> Parameter name: component]
> System.ComponentModel.TypeDescriptor.GetProperties (Object
> component, Boolean noCustomTypeDesc) +173
> System.ComponentModel.TypeDescriptor.GetProperties (Object
> component) +7
> System.Web.UI.WebControls.BoundColumn.OnDataBindCo lumn(Object
> sender, EventArgs e) +95
> System.Web.UI.Control.OnDataBinding(EventArgs e) +66
> System.Web.UI.Control.DataBind() +26
> System.Web.UI.Control.DataBind() +86
> System.Web.UI.WebControls.DataGrid.CreateItem(Int3 2 itemIndex,
> Int32 dataSourceIndex, ListItemType itemType, Boolean dataBind, Object
> dataItem, DataGridColumn[] columns, TableRowCollection rows,
> PagedDataSource pagedDataSource) +169
> System.Web.UI.WebControls.DataGrid.CreateControlHi erarchy(Boolean
> useDataSource) +1408
> System.Web.UI.WebControls.BaseDataList.OnDataBindi ng(EventArgs e)
> +49
> System.Web.UI.WebControls.BaseDataList.DataBind() +23
> ASP.test7_aspx.__Render__control1(HtmlTextWriter __output, Control
> parameterContainer) in C:\Inetpub\wwwroot\test\test7.aspx:85
> System.Web.UI.Control.RenderChildren(HtmlTextWrite r writer) +27
> System.Web.UI.Control.Render(HtmlTextWriter writer) +7
> System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +243
> System.Web.UI.Page.ProcessRequestMain() +1929
>
>
>
> I'm assuming (but can't be sure) that this error message is because
> the datagrid doesn't know how to bind the custom collection or objects
> to its required datastructure. If this is the case I'd appreciate some
> advice on how to do this.
>
> If not, then any other help/explanation would be much appreciated.
>
> To elaborate further, the data in question is being retrieved from an
> Object Database. Object databases can store the objects in their own
> "collections" called sets which provide their own iterators, search,
> indexing etcetera. Hence I do not wish to use Collectionbase since
> this would require copying the OODB sets into the innerList (the sets
> are rather large). Really all I want is a wrapper (and adapter
> pattern) that presents these sets as a collection that can be bound to
> the datagrid, eg, implementing a custome collection using ICollection,
> IList and IEnumerable, but calling the OODB methods for iteration,
> indexing etc.
>
> And it must be capably of binding to a datagrid control.
>
> One more thing. At present the implementation is in Managed C++,
> (because the OODB API is C++), but solutions in C# are acceptable if
> there is no Managed C++ approach that will work.
>
> thanks in advance
>
> Rachel



 
Reply With Quote
 
 
 
 
Rachel Koktava
Guest
Posts: n/a
 
      09-15-2003
Hi

In follow up to my previous posting it would seem that you don't need
to implement ITypedList. In fact a Managed C++ class that implements
IList, ICollection and IEnumerable doesn't need to do anything to bind
to a datagrid. The exception was caused by the mechanism that a
datagrid uses to bind to the collection.

Under the covers it would seem that the datagrid doesn't extract data
by using the Enumerator and walking the collection, but by using the
indexer e.g something line

for(int i=0; i < myCollection.Count; i++
{
datagrid[j]=myCollection[i];
}

because I was using the collection to represent an OO extent, I'd
defined the indexer (using
[System::Reflection:efaultMemberAttribute]) to map to the extend
index for fast look ups. Hence the datagrid couldn't bind because it
would start doing the for loop and fail on i=0;

I've posted this in case it may help someone in the future.

regards
Rachel
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Complex data binding question, binding child objects of a custom collection. JcFx ASP .Net Datagrid Control 0 06-01-2005 04:01 PM
Returning CollectionBase from WebService Web Team @ Borough of Poole ASP .Net 1 04-27-2005 10:14 AM
Performance of CollectionBase class Vadivel Kumar ASP .Net 4 02-17-2005 03:45 AM
Is there a dataadapter that can use a class collectionbase as it's source? Steve Mauldin ASP .Net 0 08-27-2004 04:45 PM
collection list count (CollectionBase) list.add - problems jason@cyberpine.com ASP .Net 3 11-03-2003 05:55 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57