Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > ASP .Net Web Controls > Server Control using a Collection

Reply
Thread Tools

Server Control using a Collection

 
 
ME
Guest
Posts: n/a
 
      07-01-2004
Ok I am brand new at C#. I am attempting to build a server control that
contains a collection. Trouble is when I place my control on my page and
edit the collection via the property window (using an Editor) the control
generates the following html:

<controlgroup:ControlGroupControl id="ControlGroupControl2" runat="server"
Items="(Collection)"></controlgroup:ControlGroupControl>

Note that Items shows up as just "(Collections)". Now the desired tag
structure is similar to the following:

<aspropDownList id="DropDownList1" runat="server">
<asp:ListItem Value="3333">3333</asp:ListItem>
<asp:ListItem Value="ffffffffff">ffffffff</asp:ListItem>
</aspropDownList>

So now how would one go about creating a control to automatically generate
the correct tags and also read from them as well?

Thanks,

Matt



 
Reply With Quote
 
 
 
 
Teemu Keiski
Guest
Posts: n/a
 
      07-01-2004
Hi,

1) the collection property needs to be read-only (instantiate the collection
when property is accessed for the first time)
2). collection property should be declared with
PersistenceMode(PersistenceMode.InnerProperty),
DesignerSerializationVisibility(DesignerSerializat ionVisibility.Content) and
NotifyParentProperty(true) attributes

Have you done these? If this doesn't help, post the code.

--
Teemu Keiski
MCP, Microsoft MVP (ASP.NET), AspInsiders member
ASP.NET Forum Moderator, AspAlliance Columnist
http://blogs.aspadvice.com/joteke



"ME" <trash.trash@comcastDOTnet> wrote in message
news:3sOEc.7440$MB3.867@attbi_s04...
> Ok I am brand new at C#. I am attempting to build a server control that
> contains a collection. Trouble is when I place my control on my page and
> edit the collection via the property window (using an Editor) the control
> generates the following html:
>
> <controlgroup:ControlGroupControl id="ControlGroupControl2" runat="server"
> Items="(Collection)"></controlgroup:ControlGroupControl>
>
> Note that Items shows up as just "(Collections)". Now the desired tag
> structure is similar to the following:
>
> <aspropDownList id="DropDownList1" runat="server">
> <asp:ListItem Value="3333">3333</asp:ListItem>
> <asp:ListItem Value="ffffffffff">ffffffff</asp:ListItem>
> </aspropDownList>
>
> So now how would one go about creating a control to automatically generate
> the correct tags and also read from them as well?
>
> Thanks,
>
> Matt
>
>
>



 
Reply With Quote
 
 
 
 
ME
Guest
Posts: n/a
 
      07-01-2004
Thank you. What would it take to get the control to "read" these values
after the GUI page has been saved and closed then reopened again? It seems
that if I do this the control reverts to "Error Creating Control". My guess
is that it is not reading these values but I am not absolutly certain.
Below is my controls code (please excuse my ignorance, like I said I am very
new to this!):


using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.Design;

using System.ComponentModel;

using System.ComponentModel.Design;

using System.Collections;

using System.IO;

using System.Text;

using System.Drawing.Design;

//using System.

[

assembly: TagPrefix("ControlGroup","ControlGroup")

]

namespace ControlGroup

{

/// <summary>

/// Summary description for WebCustomControl1.

/// </summary>

///

[DefaultProperty("Text"),

ToolboxData("<{0}:ControlGroupControl
runat=server></{0}:ControlGroupControl>"),

SerializableAttribute()]

public class ControlGroupControl : System.Web.UI.WebControls.WebControl,
INamingContainer

{

#region Private Variables

private string text="";

private ControlGroupItemCollection items = new ControlGroupItemCollection();

private ControlGroupItemCollection allItems = new
ControlGroupItemCollection();

private ListBox lbItems = new ListBox();

private Label lblTitleID = new Label();

private TextBox txtInfo = new TextBox();

#endregion

#region Constructors and Initializers

public ControlGroupControl()

{

try

{

this.Visible=true;

txtInfo.Height=300;

//this.Height=100;

//this.Width=100;

lbItems.BorderStyle=BorderStyle.None;

lbItems.BorderWidth=0;

lbItems.Width=300;

txtInfo.Width=300;

txtInfo.TextMode=TextBoxMode.MultiLine;

txtInfo.Text += "CONSTRUCTED!\n";

}

catch (Exception ex)

{

items=null;

allItems=null;

text="Error! - " + ex.ToString();

}

}

protected override void OnInit(EventArgs e)

{

if (AllItems.Count != Page.Controls.Count-1)

{

txtInfo.Text += "INITIALIZED & RESET!\n";

fillAllItems();

}

base.OnInit (e);

}

protected override void OnLoad(EventArgs e)

{

txtInfo.Text += "LOADED!\n";

base.OnLoad (e);

}

protected override void OnPreRender(EventArgs e)

{

txtInfo.Text += "PRE-RENDER!\n";

base.OnPreRender (e);

}



#endregion

#region Void Methods

private void FillListBox()

{

//Start by clearing the list

lbItems.Items.Clear();

//If the items collection has not been instantiated then

//Do not attempt to iterate through it.

if (items.Count>0)

{

//for (int i=0; i< items.Count; i++)

foreach(ControlGroupItem cntl in items)

{

lbItems.Items.Add(cntl.ControlID.ToString());

}

}

else

{

//Writes "No Controls

lbItems.Items.Add("No Controls");

}



}

private void fillAllItems()

{

try

{

int c = Page.Controls.Count;

int tmpID=0;

ControlGroupItem tempControl = new ControlGroupItem();

allItems.Clear();


for(int i=0; i < c; i++)

{

//txtInfo.Text = txtInfo.Text + Page.Controls[i].ID.ToString() + "\n";

tempControl = new ControlGroupItem();

// set the control structure properties of the control

tempControl.ControlID = Page.Controls[i].ID.ToString();

tempControl.ControlType = Page.Controls[i].GetType();

//tempControl.BoundProperty=

// add the control structure to the collection

tmpID=this.allItems.Add(tempControl);

txtInfo.Text +="CONTROL " + this.allItems[tmpID].ControlID.ToString() + " ["
+ allItems.Count.ToString() + "]\n";

}

this.Text="WORKED!";

}

catch (Exception ex)

{

System.Diagnostics.Debug.Write(ex.ToString());

this.Text=ex.ToString();

}

}

#endregion


#region Properties

[

Bindable(true),

Category("Data"),

]

public string Text

{

get

{

return text;

}

set

{

text=value;

}

}



/// <summary>

/// Items = The group of referenced controls

/// </summary>

[Category("Misc"),

PersistenceMode(PersistenceMode.InnerProperty),

DesignerSerializationVisibility(DesignerSerializat ionVisibility.Content),

NotifyParentProperty(true),

EditorAttribute(typeof(ControlGroupEditor), typeof(UITypeEditor))

]

public ControlGroupItemCollection Items

{

get

{

return items;

}

}

[BrowsableAttribute (false)]

public ControlGroupItemCollection AllItems

{

get

{

return allItems;

}

set

{

allItems = value;

}

}

#endregion

#region Rendering

protected override StateBag ViewState

{

get

{

return base.ViewState;

}

}

protected override object SaveViewState()

{

return base.SaveViewState ();

}

protected override void LoadViewState(object savedState)

{

base.LoadViewState (savedState);

}



protected override void RenderContents(HtmlTextWriter writer)

{

//Render(writer);

base.RenderContents (writer);

}



protected override void RenderChildren(HtmlTextWriter writer)

{

FillListBox();

lblTitleID.Text=this.ID.ToString();

// Render

lblTitleID.RenderControl(writer);

writer.Write("<BR>");

lbItems.RenderControl(writer);

writer.Write("<BR>");

txtInfo.RenderControl(writer);

}

#endregion

}

}







"Teemu Keiski" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Hi,
>
> 1) the collection property needs to be read-only (instantiate the

collection
> when property is accessed for the first time)
> 2). collection property should be declared with
> PersistenceMode(PersistenceMode.InnerProperty),
> DesignerSerializationVisibility(DesignerSerializat ionVisibility.Content)

and
> NotifyParentProperty(true) attributes
>
> Have you done these? If this doesn't help, post the code.
>
> --
> Teemu Keiski
> MCP, Microsoft MVP (ASP.NET), AspInsiders member
> ASP.NET Forum Moderator, AspAlliance Columnist
> http://blogs.aspadvice.com/joteke
>
>
>
> "ME" <trash.trash@comcastDOTnet> wrote in message
> news:3sOEc.7440$MB3.867@attbi_s04...
> > Ok I am brand new at C#. I am attempting to build a server control that
> > contains a collection. Trouble is when I place my control on my page

and
> > edit the collection via the property window (using an Editor) the

control
> > generates the following html:
> >
> > <controlgroup:ControlGroupControl id="ControlGroupControl2"

runat="server"
> > Items="(Collection)"></controlgroup:ControlGroupControl>
> >
> > Note that Items shows up as just "(Collections)". Now the desired tag
> > structure is similar to the following:
> >
> > <aspropDownList id="DropDownList1" runat="server">
> > <asp:ListItem Value="3333">3333</asp:ListItem>
> > <asp:ListItem Value="ffffffffff">ffffffff</asp:ListItem>
> > </aspropDownList>
> >
> > So now how would one go about creating a control to automatically

generate
> > the correct tags and also read from them as well?
> >
> > Thanks,
> >
> > Matt
> >
> >
> >

>
>



 
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
Collection problems (create Collection object, add data to collection, bind collection to datagrid) Řyvind Isaksen ASP .Net 1 05-18-2007 09:24 AM
Server Control using a Collection ME ASP .Net Building Controls 1 07-05-2004 06:04 AM
Server Control using a Collection ME ASP .Net Building Controls 2 07-01-2004 04:52 PM
Server Control using a Collection ME ASP .Net Building Controls 0 07-01-2004 02:20 PM
Server Control using a Collection ME ASP .Net Building Controls 0 07-01-2004 07:05 AM



Advertisments