You're welcome Mirek,
Regards,
Steven Cheng
Microsoft Online Support
Get Secure!
www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)
--------------------
| From: "Mirek Endys" <
[email protected]>
| References: <#
[email protected]>
<lYD#
[email protected]>
<
[email protected]>
<
[email protected]>
<
[email protected]>
| Subject: Re: WebControl with Collection Property in Design Time
| Date: Fri, 11 Nov 2005 11:10:38 +0100
| Lines: 601
| X-Priority: 3
| X-MSMail-Priority: Normal
| X-Newsreader: Microsoft Outlook Express 6.00.2900.2670
| X-RFC2646: Format=Flowed; Original
| X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2670
| Message-ID: <
[email protected]>
| Newsgroups: microsoft.public.dotnet.framework.aspnet.webcontrols
| NNTP-Posting-Host: gw.coty.cz 195.47.52.129
| Path: TK2MSFTNGXA02.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP14.phx.gbl
| Xref: TK2MSFTNGXA02.phx.gbl
microsoft.public.dotnet.framework.aspnet.webcontrols:31081
| X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webcontrols
|
| Great, you helped me a lot!!! These infos open me next door.
| Many thanks to you.
|
|
| | > Hey Mirek,
| >
| > Thanks for getting back to me.
| > I've just add your code to my VS.NET 2005 IDE and seems it report error
| > when I just drag this control onto a form. Here the two things I found
in
| > the code you pasted:
| >
| >
| > 1. I think we should put some checking code to ensure that the
collection
| > is not empty. like:
| > if (_Hyperlinks != null && _Hyperlinks.Count > 0)
| > { ....}else{...}
| >
| >
| > 2. Why do you put the following Attribute on the HyperLinks property?
| >
| > [Editor(typeof(List<HyperLink>), typeof(UITypeEditor))]
| >
| > Since HyperLink is buildin control types, the IDE can correctly use the
| > property edit for it. Also, even if you use it, you should assign a
valid
| > Control Editor's typename rather than
| >
| > typeof(List<HyperLink> (this is a Class type , not Editor type....)
| >
| >
| > After adjusting the above two things, here is the final code I got
working
| > correctly on myside. I can drag the control from ToolBox onto webform.
| > Then, Edit the "HyperLinks" collection through property Grid( a
Collection
| > Editor) , and I can add /remove HyperLinks in the Collection and apply
| > styles to each of the HyperLinks in the Collection. In addition, when I
| > switch between DesignView and Html View, I can see the HyperLinnks has
| > been
| > persisted in HTML correctly. e.g:
| >
| > =================
| > <cc1:WebNavigation ID="WebNavigation1" runat="server"
| > Hyperlinks-Capacity="4">
| > <asp:HyperLink runat="server" BackColor="Blue"
| > BorderColor="#FFFF80" BorderStyle="Solid"
| > BorderWidth="1px" ForeColor="Fuchsia"
| > NavigateUrl="sdfsfdsfdsfdsfdsfsdfd"
| > >HyperLink1</asp:HyperLink>
| > <asp:HyperLink runat="server" NavigateUrl="sdfdsfdsfdsfsd"
| > BackColor="Black" ForeColor="White" BorderStyle="Solid"
| > BorderWidth="1px"
| > BorderColor="Yellow">HyperLink2</asp:HyperLink>
| > <asp:HyperLink runat="server"
| > NavigateUrl="fdsfdsfdf">HyperLink3</asp:HyperLink>
| > <asp:HyperLink runat="server" NavigateUrl="fdsfsdfsdfsf"
| > BackColor="#FFFFC0" BorderColor="Purple" BorderStyle="Dashed"
| > BorderWidth="2px" ForeColor="Navy">HyperLink4</asp:HyperLink>
| > </cc1:WebNavigation>
| > ====================
| >
| >
| > Here is the modified code, you can have a try on your side. If you
still
| > get any problem on working on it at runtime or design-time, I think we
| > have
| > to do some further throubleshooting on environment specific issue. BTW,
| > I'm
| > using VS.NET 2005 Professional edition RTM.
| >
| >
| > ===============================================
| > namespace CustomControl
| > {
| > public class WebNavigationDesigner : ControlDesigner
| > {
| > public override string GetDesignTimeHtml()
| > {
| > WebNavigation wNavigation = (WebNavigation)Component;
| >
| > if (wNavigation.Hyperlinks != null &&
| > wNavigation.Hyperlinks.Count > 0)
| > {
| > StringBuilder sb = new StringBuilder();
| > StringWriter sWriter = new StringWriter(sb);
| > HtmlTextWriter htWriter = new HtmlTextWriter(sWriter);
| > foreach (HyperLink hyperlink in wNavigation.Hyperlinks)
| > hyperlink.RenderControl(htWriter);
| >
| > return sWriter.ToString();
| > }
| > else
| > {
| > return "<font size='30'>Empty Collection.</font>";
| > }
| > }
| > }
| >
| > [DefaultProperty("Hyperlinks")]
| > [ToolboxData("<{0}:WebNavigation runat=server></{0}:WebNavigation>")]
| > [Designer("WebNavigationDesigner", "WebNavigation")]
| > [ParseChildren(true, "Hyperlinks")]
| > public class WebNavigation : WebControl
| > {
| > private List<HyperLink> _Hyperlinks = null;
| >
| > protected override void RenderContents(HtmlTextWriter output)
| > {
| > if (_Hyperlinks != null && _Hyperlinks.Count > 0)
| > {
| > foreach (HyperLink hLink in _Hyperlinks)
| > hLink.RenderControl(output);
| > }
| > else
| > {
| > Label lbl = new Label();
| > lbl.ID = "lblMessage";
| > lbl.Text = "Empty Collection.";
| > lbl.RenderControl(output);
| > }
| > }
| > [Bindable(true)]
| > [Category("Data")]
| >
| >
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
| > [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
| > public List<HyperLink> Hyperlinks
| > {
| > get
| > {
| > if (_Hyperlinks == null)
| > _Hyperlinks = new List<HyperLink>();
| >
| > return _Hyperlinks;
| > }
| > }
| > }
| > }
| > ========================================================
| >
| > Thanks,
| >
| > Steven Cheng
| > Microsoft Online Support
| >
| > Get Secure!
www.microsoft.com/security
| > (This posting is provided "AS IS", with no warranties, and confers no
| > rights.)
| > --------------------
| > | From: "Mirek Endys" <
[email protected]>
| > | References: <#
[email protected]>
| > <lYD#
[email protected]>
| > <
[email protected]>
| > | Subject: Re: WebControl with Collection Property in Design Time
| > | Date: Fri, 11 Nov 2005 09:33:52 +0100
| > | Lines: 411
| > | X-Priority: 3
| > | X-MSMail-Priority: Normal
| > | X-Newsreader: Microsoft Outlook Express 6.00.2900.2670
| > | X-RFC2646: Format=Flowed; Original
| > | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2670
| > | Message-ID: <
[email protected]>
| > | Newsgroups: microsoft.public.dotnet.framework.aspnet.webcontrols
| > | NNTP-Posting-Host: gw.coty.cz 195.47.52.129
| > | Path: TK2MSFTNGXA02.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP15.phx.gbl
| > | Xref: TK2MSFTNGXA02.phx.gbl
| > microsoft.public.dotnet.framework.aspnet.webcontrols:31079
| > | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webcontrols
| > |
| > | No, it is not working. I will try to explain it again.
| > | What I need
| > | ------------------------------------------------------
| > | I need to create my own Web Server Control.
| > | This control will contain a count of HyperLink controls.
| > | I need this control has design-time support:
| > | - I will add hyperlinks by design-time property toolbox.
| > | - This properties (including hyperlinks) will be stored and will be
| > | editable (add/remove)
| > | whole design time by property toolbox.
| > | - This control and its style will be displayed in design-time on the
| > web
| > | page
| > |
| > |
| > | My control was able to edit hyperlinks, by property toolbox
(collection
| > | editor)
| > | in designtime, but I can only add the HyperLinks but the second time
| > | I open the property collection editor, the hyperlinks are gone.
| > | Thats because they arent stored.
| > |
| > | I think, that the control must working by this way:
| > | - in case HyperLinks are edited (added, removed) they must be
| > | parsed from/to the page (or into the control) in design time.
| > | I was able (but not now) to parse them to page in design time, but not
| > FROM
| > | page
| > | into property toolbox (collection editor)
| > |
| > | Well, and now, what I did
| > | --------------------------------------
| > | public class WebNavigationDesigner : ControlDesigner
| > | {
| > | public override string GetDesignTimeHtml()
| > | {
| > | WebNavigation wNavigation = (WebNavigation)Component;
| > | StringWriter sWriter = new StringWriter();
| > | HtmlTextWriter htWriter = new HtmlTextWriter(sWriter);
| > | foreach(HyperLink hyperlink in wNavigation.Hyperlinks)
| > | hyperlink.RenderControl(htWriter);
| > |
| > | return sWriter.ToString();
| > | }
| > | }
| > |
| > | [DefaultProperty("Hyperlinks")]
| > | [ToolboxData("<{0}:WebNavigation runat=server></{0}:WebNavigation>")]
| > | [Designer("WebNavigationDesigner", "WebNavigation")]
| > | [ParseChildren(true, "Hyperlinks")]
| > | public class WebNavigation : WebControl
| > | {
| > | private List<HyperLink> _Hyperlinks = null;
| > |
| > | protected override void RenderContents(HtmlTextWriter output)
| > | {
| > | foreach(HyperLink hLink in _Hyperlinks)
| > | hLink.RenderControl(output);
| > | }
| > | [Bindable(true)]
| > | [Category("Data")]
| > | [Editor(typeof(List<HyperLink>), typeof(UITypeEditor))]
| > |
| >
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
| > | [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
| > | public List<HyperLink> Hyperlinks
| > | {
| > | get
| > | {
| > | if(_Hyperlinks == null)
| > | _Hyperlinks = new List<HyperLink>();
| > | return _Hyperlinks;
| > | }
| > | }
| > | }
| > |
| > | ==============================================================
| > | Thats simplified problem, please help me to get this simple
| > | control to life.
| > |
| > | Thanks
| > |
| > | Mirek
| > | --------------------------------------------------------------
| > |
| > | | > | > Hi Mirek,
| > | >
| > | > How are you doing on this issue. Does the suggestions in my last
reply
| > | > helps you resolve the problem? if there're anything else we can
help,
| > | > please feel free to post here. Thanks,
| > | >
| > | > Steven Cheng
| > | > Microsoft Online Support
| > | >
| > | > Get Secure!
www.microsoft.com/security
| > | > (This posting is provided "AS IS", with no warranties, and confers
no
| > | > rights.)
| > | >
| > | >
| > | >
| > | > --------------------
| > | > | X-Tomcat-ID: 120657561
| > | > | References: <#
[email protected]>
| > | > | MIME-Version: 1.0
| > | > | Content-Type: text/plain
| > | > | Content-Transfer-Encoding: 7bit
| > | > | From: (e-mail address removed) (Steven Cheng[MSFT])
| > | > | Organization: Microsoft
| > | > | Date: Thu, 03 Nov 2005 06:57:47 GMT
| > | > | Subject: RE: WebControl with Collection Property in Design Time
| > | > | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.webcontrols
| > | > | Message-ID: <lYD#
[email protected]>
| > | > | Newsgroups: microsoft.public.dotnet.framework.aspnet.webcontrols
| > | > | Lines: 133
| > | > | Path: TK2MSFTNGXA01.phx.gbl
| > | > | Xref: TK2MSFTNGXA01.phx.gbl
| > | > microsoft.public.dotnet.framework.aspnet.webcontrols:11644
| > | > | NNTP-Posting-Host: TOMCATIMPORT1 10.201.218.122
| > | > |
| > | > | Hi Mirek,
| > | > |
| > | > | Welcome to ASPNET newsgroup.
| > | > | From you description, you're developing a custom web server
control
| > (in
| > | > | asp.net 2.0) which contains a collection property and you found
that
| > the
| > | > | control always throw out "could not be set on property" error when
| > | > | swtiching between HTML view and design-view in VS.NET IDE(2005) ,
| > YES?
| > | > |
| > | > | Based on my experience, this problem is caused by our Collection
| > | > property's
| > | > | declaration. For Collection property in .NET Custom Control, we
can
| > only
| > | > | provide getter accessor for it, in other world it should be
defined
| > as
| > | > | readonly. Like:
| > | > | ===========
| > | > | public List<HyperLink> Hyperlinks
| > | > | {
| > | > |
| > | > | get
| > | > | {
| > | > |
| > | > | if ( _Hyperlinks == null )
| > | > |
| > | > | _Hyperlinks = new List<HyperLink> ();
| > | > |
| > | > | return _Hyperlinks;
| > | > |
| > | > | }
| > | > |
| > | > | //no setter needed
| > | > |
| > | > | }
| > | > | ==============
| > | > |
| > | > | For Collection property, we just need to add/remove items from
it,
| > do
| > | > not
| > | > | need to modify the Collection reference itself. Also, we can find
| > that
| > | > | those collection property in ASP.NET buildin controls are just
| > defined
| > | > as
| > | > | readonly(Getter only...). So you can remove the setter accessor in
| > your
| > | > | control's Hyperlinks property.
| > | > |
| > | > | Hope helps. Thanks,
| > | > |
| > | > | Steven Cheng
| > | > | Microsoft Online Support
| > | > |
| > | > | Get Secure!
www.microsoft.com/security
| > | > | (This posting is provided "AS IS", with no warranties, and
confers
| > no
| > | > | rights.)
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | > |
| > | > | --------------------
| > | > | | From: "Mirek Endys" <
[email protected]>
| > | > | | Subject: WebControl with Collection Property in Design Time
| > | > | | Date: Wed, 2 Nov 2005 12:54:02 +0100
| > | > | | Lines: 209
| > | > | | X-Priority: 3
| > | > | | X-MSMail-Priority: Normal
| > | > | | X-Newsreader: Microsoft Outlook Express 6.00.2900.2670
| > | > | | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2670
| > | > | | X-RFC2646: Format=Flowed; Original
| > | > | | Message-ID: <#
[email protected]>
| > | > | | Newsgroups: microsoft.public.dotnet.framework.aspnet.webcontrols
| > | > | | NNTP-Posting-Host: gw.coty.cz 195.47.52.129
| > | > | | Path:
| > TK2MSFTNGXA01.phx.gbl!TK2MSFTNGP08.phx.gbl!TK2MSFTNGP15.phx.gbl
| > | > | | Xref: TK2MSFTNGXA01.phx.gbl
| > | > | microsoft.public.dotnet.framework.aspnet.webcontrols:11628
| > | > | | X-Tomcat-NG:
microsoft.public.dotnet.framework.aspnet.webcontrols
| > | > | |
| > | > | | Hallo,
| > | > | |
| > | > | | I need to create WebControl, that stores List of Hyperlinks.
| > | > | | I have problem in design-time.
| > | > | | When I add an hyperlinks, they are rendered in contents,
| > hyperlinks
| > | > are
| > | > | | vsible on page.
| > | > | | In case I switch into source and then back into design, the
| > control
| > | > says:
| > | > | |
| > | > | | Error Creating Control - WebNavigation1
| > | > | | 'cc1:WebNavigation' could not be set on property 'Hyperlinks'.
| > | > | |
| > | > | | Im wrong, but I dont know where. Could you help me? Source is
| > bellow.
| > | > | |
| > | > | | using System;
| > | > | |
| > | > | | using System.IO;
| > | > | |
| > | > | | using System.Collections.Generic;
| > | > | |
| > | > | | using System.Collections;
| > | > | |
| > | > | | using System.Drawing.Design;
| > | > | |
| > | > | | using System.ComponentModel;
| > | > | |
| > | > | | using System.Text;
| > | > | |
| > | > | | using System.Web;
| > | > | |
| > | > | | using System.Web.UI;
| > | > | |
| > | > | | using System.Web.UI.Design;
| > | > | |
| > | > | | using System.Web.UI.WebControls;
| > | > | |
| > | > | | namespace WebNavigation
| > | > | |
| > | > | | {
| > | > | |
| > | > | | public class WebNavigationDesigner :
| > | > System.Web.UI.Design.ControlDesigner
| > | > | |
| > | > | | {
| > | > | |
| > | > | | public override string GetDesignTimeHtml ()
| > | > | |
| > | > | | {
| > | > | |
| > | > | | WebNavigation wn = (WebNavigation) Component;
| > | > | |
| > | > | | StringWriter sw = new StringWriter ();
| > | > | |
| > | > | | HtmlTextWriter tw = new HtmlTextWriter ( sw );
| > | > | |
| > | > | |
| > | > | | foreach ( HyperLink hl in wn.Hyperlinks )
| > | > | |
| > | > | | {
| > | > | |
| > | > | | hl.RenderControl ( tw );
| > | > | |
| > | > | | }
| > | > | |
| > | > | | return sw.ToString ();
| > | > | |
| > | > | |
| > | > | | }
| > | > | |
| > | > | | }
| > | > | |
| > | > | | //[DefaultProperty ( "Hyperlinks" )]
| > | > | |
| > | > | | [ToolboxData ( "<{0}:WebNavigation
| > | > runat=server></{0}:WebNavigation>" )]
| > | > | |
| > | > | | [Designer ( "WebNavigation.WebNavigationDesigner,
| > WebNavigation" )]
| > | > | |
| > | > | | [ParseChildren(true, "Hyperlinks")]
| > | > | |
| > | > | | public class WebNavigation : WebControl
| > | > | |
| > | > | | {
| > | > | |
| > | > | |
| > | > | | [DefaultValue(100)]
| > | > | |
| > | > | | [Browsable(true)]
| > | > | |
| > | > | | [Bindable ( true )]
| > | > | |
| > | > | | public override Unit Width
| > | > | |
| > | > | | {
| > | > | |
| > | > | | get
| > | > | |
| > | > | | {
| > | > | |
| > | > | | return base.Width;
| > | > | |
| > | > | | }
| > | > | |
| > | > | | set
| > | > | |
| > | > | | {
| > | > | |
| > | > | | base.Width = value;
| > | > | |
| > | > | | }
| > | > | |
| > | > | | }
| > | > | |
| > | > | | [Bindable ( true )]
| > | > | |
| > | > | | [Category ( "Appearance" )]
| > | > | |
| > | > | | [DefaultValue ( "" )]
| > | > | |
| > | > | | [Localizable ( true )]
| > | > | |
| > | > | | public string Caption
| > | > | |
| > | > | | {
| > | > | |
| > | > | | get
| > | > | |
| > | > | | {
| > | > | |
| > | > | | String s = (String) ViewState["Caption"];
| > | > | |
| > | > | | return ( ( s == null ) ? String.Empty : s );
| > | > | |
| > | > | | }
| > | > | |
| > | > | | set
| > | > | |
| > | > | | {
| > | > | |
| > | > | | ViewState["Caption"] = value;
| > | > | |
| > | > | | }
| > | > | |
| > | > | | }
| > | > | |
| > | > | |
| > | > | | protected override void RenderContents ( HtmlTextWriter writer )
| > | > | |
| > | > | | {
| > | > | |
| > | > | | foreach ( HyperLink hl in _Hyperlinks )
| > | > | |
| > | > | | this.Controls.Add ( hl );
| > | > | |
| > | > | | base.RenderContents ( writer);
| > | > | |
| > | > | | }
| > | > | |
| > | > | | private List<HyperLink> _Hyperlinks;
| > | > | |
| > | > | | //[Editor(typeof(List<HyperLink>), typeof(UITypeEditor))]
| > | > | |
| > | > | | [DesignerSerializationVisibility (
| > | > | DesignerSerializationVisibility.Content)]
| > | > | |
| > | > | | [PersistenceMode ( PersistenceMode.InnerDefaultProperty)]
| > | > | |
| > | > | | public List<HyperLink> Hyperlinks
| > | > | |
| > | > | | {
| > | > | |
| > | > | | get
| > | > | |
| > | > | | {
| > | > | |
| > | > | | if ( _Hyperlinks == null )
| > | > | |
| > | > | | _Hyperlinks = new List<HyperLink> ();
| > | > | |
| > | > | | return _Hyperlinks;
| > | > | |
| > | > | | }
| > | > | |
| > | > | | set
| > | > | |
| > | > | | {
| > | > | |
| > | > | | foreach(HyperLink hl in value)
| > | > | |
| > | > | | this.Controls.Add(hl);
| > | > | |
| > | > | | _Hyperlinks = value;
| > | > | |
| > | > | | }
| > | > | |
| > | > | | }
| > | > | |
| > | > | |
| > | > | | protected override void AddedControl ( Control control, int
| > index )
| > | > | |
| > | > | | {
| > | > | |
| > | > | | base.AddedControl ( control, index );
| > | > | |
| > | > | | }
| > | > | |
| > | > | | }
| > | > | |
| > | > | | }
| > | > | |
| > | > | |
| > | > | |
| > | > | |
| > | > | |
| > | > |
| > | > |
| > | >
| > |
| > |
| > |
| >
|
|
|