Collection property "could not be initialized" in design mode for custom datagrid control

B

BluegrassNate

Hello all,

I've been working on a custom datagrid (custom web control inherited
from DataGrid). I am attempting to add a new collection property to
the control as described all over this group and the web... seems like
it should be easy but I've been at it for about a week :-(

Here's the problem: I am able to use my custom collection editor to add
collection items just fine, but the collection refuses to 'rebuild'
itself when I reopen the aspx file and gives the very helpful error
''NonDraggableColumns' could not be initialized". Obviously
NonDraggableColumns is my collection property.

Here are some relevant fragments:

ASPX code for datagrid looks like this:

<cc1:dhtmldatagrid id="dgResults" runat="server"
AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True">
<Columns>
<asp:BoundColumn DataField="test" HeaderText="test"></asp:BoundColumn>
</Columns>
<NonDraggableColumns>
<cc1:DataGridColumnIndex ParentPosition="0"></cc1:DataGridColumnIndex>
</NonDraggableColumns>
</cc1:dhtmldatagrid>

So the editor did its job and correctly added an item to my custom
collection, which is simply a collection of DataGridColumnIndex objects
inherited from CollectionBase. I've provided the proper indexers and
Add methods, etc.

The DataGridColumnIndex class is very very simple (because I just need
to get a collection like this working first!) and only has one public
property - ParentPosition (Int32).

My collection property is defined in my control as follows:

[Editor(typeof(ACS.Bluegrass.Web.Controls.ColumnCollectionSubsetEditor),
typeof(System.Drawing.Design.UITypeEditor)),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
PersistenceMode(PersistenceMode.InnerProperty)]
public DataGridColumnCollectionSubset NonDraggableColumns
{
get
{
if (nonDraggableColumns == null)
{
nonDraggableColumns = new DataGridColumnCollectionSubset();
}

return nonDraggableColumns;
}
}

Of course, the control class is marked as ParseChildren(true),
PersistChildren(false).

Everything has the same namespace. The strangest thing is, if I simply
use and ArrayList instead of my CollectionBase -based collection class,
the parsing will suceed, BUT only if I manually remove the namespace
prefix (cc1:) from the inner <cc1:DataGridColumnIndex
ParentPosition="0"></cc1:DataGridColumnIndex> tags.

Someone please help... I've been pulling my hair out and losing sleep
over this problem and I've poured over every post and web page I can
find about this subject, to no avail.

Let me know if any more information is needed.

P.S. This is ASP.NET 1.1, VS.NET 2003

Thank you!
 
S

Sundar.k

BluegrassNate said:
Hello all,

I've been working on a custom datagrid (custom web control inherited
from DataGrid). I am attempting to add a new collection property to
the control as described all over this group and the web... seems like
it should be easy but I've been at it for about a week :-(

Here's the problem: I am able to use my custom collection editor to add
collection items just fine, but the collection refuses to 'rebuild'
itself when I reopen the aspx file and gives the very helpful error
''NonDraggableColumns' could not be initialized". Obviously
NonDraggableColumns is my collection property.

Here are some relevant fragments:

ASPX code for datagrid looks like this:

<cc1:dhtmldatagrid id="dgResults" runat="server"
AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True">
<Columns>
<asp:BoundColumn DataField="test" HeaderText="test"></asp:BoundColumn>
</Columns>
<NonDraggableColumns>
<cc1:DataGridColumnIndex ParentPosition="0"></cc1:DataGridColumnIndex>
</NonDraggableColumns>
</cc1:dhtmldatagrid>

So the editor did its job and correctly added an item to my custom
collection, which is simply a collection of DataGridColumnIndex objects
inherited from CollectionBase. I've provided the proper indexers and
Add methods, etc.

The DataGridColumnIndex class is very very simple (because I just need
to get a collection like this working first!) and only has one public
property - ParentPosition (Int32).

My collection property is defined in my control as follows:

[Editor(typeof(ACS.Bluegrass.Web.Controls.ColumnCollectionSubsetEditor),
typeof(System.Drawing.Design.UITypeEditor)),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
PersistenceMode(PersistenceMode.InnerProperty)]
public DataGridColumnCollectionSubset NonDraggableColumns
{
get
{
if (nonDraggableColumns == null)
{
nonDraggableColumns = new DataGridColumnCollectionSubset();
}

return nonDraggableColumns;
}
}

Of course, the control class is marked as ParseChildren(true),
PersistChildren(false).

Everything has the same namespace. The strangest thing is, if I simply
use and ArrayList instead of my CollectionBase -based collection class,
the parsing will suceed, BUT only if I manually remove the namespace
prefix (cc1:) from the inner <cc1:DataGridColumnIndex
ParentPosition="0"></cc1:DataGridColumnIndex> tags.

Someone please help... I've been pulling my hair out and losing sleep
over this problem and I've poured over every post and web page I can
find about this subject, to no avail.

Let me know if any more information is needed.

P.S. This is ASP.NET 1.1, VS.NET 2003

Thank you!
 
B

BluegrassNate

Finally!

Well I finally got it to work just now, and the problem was that my
object class that the collection is made up of didn't have a default
constructor. I only provided a constructor with a parameter and when I
added just a:

public DataGridColumnIndex() {}

to my class it functions perfectly well. I haven't seen this mentioned
anywhere else but that seemed to do it for me.
 

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

Forum statistics

Threads
473,968
Messages
2,570,153
Members
46,699
Latest member
AnneRosen

Latest Threads

Top