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

Discussion in 'ASP .Net Building Controls' started by BluegrassNate, Dec 7, 2005.

  1. 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!
     
    BluegrassNate, Dec 7, 2005
    #1
    1. Advertising

  2. BluegrassNate

    Sundar.k Guest

    RE: Collection property "could not be initialized" in design mode for

    "BluegrassNate" wrote:

    > 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!
    >
    >
     
    Sundar.k, Dec 12, 2005
    #2
    1. Advertising

  3. Re: Collection property "could not be initialized" in design mode for

    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.
     
    BluegrassNate, Dec 14, 2005
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Lloyd Dupont
    Replies:
    0
    Views:
    466
    Lloyd Dupont
    Jul 27, 2003
  2. Saimeera
    Replies:
    0
    Views:
    517
    Saimeera
    May 10, 2006
  3. Øyvind Isaksen
    Replies:
    1
    Views:
    998
    Øyvind Isaksen
    May 18, 2007
  4. Persisting a collection property in a custom datagrid

    , Dec 5, 2005, in forum: ASP .Net Building Controls
    Replies:
    0
    Views:
    113
  5. BluegrassNate
    Replies:
    0
    Views:
    166
    BluegrassNate
    Dec 7, 2005
Loading...

Share This Page