Click here to Skip to main content
6,295,667 members and growing! (16,240 online)
Email Password   helpLost your password?
Web Development » Custom Controls » General     Intermediate

Template Rounded Corner Control

By billxie

Enhance Rounded Corner Control to support template.
C#, Windows, .NET 1.0, .NET 1.1, ASP.NET, VS.NET2003, Dev
Posted:3 Aug 2004
Views:64,220
Bookmarked:45 times
Announcements
Loading...
 
Search    
Advanced Search
printPrint   Broken Article?Report       add Share
  Discuss Discuss   Recommend Article Email
6 votes for this article.
Popularity: 2.77 Rating: 3.56 out of 5
2 votes, 33.3%
1

2

3
2 votes, 33.3%
4
2 votes, 33.3%
5

Introduction

Scott posted a very exciting server control named rounded corner control, which can dynamically create image so as to make a HTML table corner look round. Since it is not easy for a graphics beginner to create images, such an idea is really cool. However, if we can make it a template control such that its content is not limited to text, this control would be more useful. This article explains how to enhance this control in order to transform it into a template control.

Sample screenshot

The image above comes from the original control. Text is displayed in the middle. After transforming it into a template control, it can be used together with databinding as shown by the following picture:

Sample screenshot

In the demo aspx page, I also show some advanced skills regarding nested DataList and databinding. Please download the code and play with it. Click here to view the online demo.

Enhancement

Thanks Scott for sharing his source code. First of all, you download the rounded corner control. And then you download the code above. Follow the instructions below to merge the code. For reference on how to write a template server control, click here.

  1. Add template container class in the namespace PrettyUI.
        //Change attribute in RoundedCorner.cs : [ParseChildren(true)]
        public class ContentTemplateContainer : WebControl, INamingContainer
        {
            public ContentTemplateContainer():base(){}
    
            private RoundedCorners _parent;
            public ContentTemplateContainer(RoundedCorners parent)
            {
                this._parent = parent;
            }
    
            public RoundedCorners Container
            {
                get{return this._parent;}
            }
    
        }
  2. Add the following code to the file RoundedCorners.cs.
        private ITemplate _contentTemplate = null;
    
        [TemplateContainer(typeof(ContentTemplateContainer))]
        public ITemplate ContentTemplate
        {
            get{return this._contentTemplate;}
            set{this._contentTemplate = value;}
        }
    
        public ContentTemplateContainer _contentTemplateContainer;
  3. Rename method CreateChildControls to private function CreateControlTree. Override CreateChildControls again.
    protected override void CreateChildControls()
    {
        Controls.Clear();
    
        if(this.ContentTemplate != null)
        {
            this._contentTemplateContainer = 
                        new ContentTemplateContainer(this);
            this.ContentTemplate.InstantiateIn(this._contentTemplateContainer);
            this.Controls.Add(this._contentTemplateContainer);
        }
        this.ChildControlsCreated = true;
    }
  4. Modify methods Render and DataBind as follows:
        public override void DataBind()
        {
            base.OnDataBinding(System.EventArgs.Empty);
    
            this.CreateChildControls();
            this.ChildControlsCreated = true;
            base.DataBind ();
        }
        protected override void Render(HtmlTextWriter writer)
        {
            CreateControlTree();
            this.RenderContents(writer);
        }
  5. Next, we have to redesign the method CreateControlTree. Before we clear Controls collection, we have to save it. The following code achieves this purpose. Put it in the front of the existing code.
        ArrayList arrList = new ArrayList();
        foreach(Control con in this.Controls)
            arrList.Add(con);

    Next, replace the middle cell with content template. Add the following code to the end of CreateControlTree:

        TableCell _midCell= box.Rows[1].Cells[1];
        if(this.ContentTemplate != null)
        {
            foreach( Control con in arrList)
            {
                _midCell.Controls.Add(con);
            }
        }

Demo

Download the test page above and add the modified PrettyUI project. The following picture resulted from the test page. Click the nested DataList, the message will show 111, 222 and 333 according to what link you click.

To see live demo, click here.

Sample screenshot

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

billxie


Member

Location: United States United States

Other popular Custom Controls articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 8 of 8 (Total in Forum: 8) (Refresh)FirstPrevNext
Generalbox.Rows[1].Cells[1]; not found PinmemberTallWebGuy11:21 6 Jul '05  
GeneralUpdating Scott's code Pinmembermangia18:49 22 Aug '04  
GeneralA bug has been fixed! Pinsussbillxie15:50 6 Aug '04  
GeneralI could not bind the DataList to the control PinmemberPhong Nguyen15:18 5 Aug '04  
GeneralRe: I could not bind the DataList to the control Pinmemberbillxie17:28 5 Aug '04  
GeneralRe: I could not bind the DataList to the control Pinsussbillxie19:51 5 Aug '04  
GeneralRe: I could not bind the DataList to the control PinmemberCode Addictive20:23 5 Aug '04  
GeneralRe: I could not bind the DataList to the control Pinmemberbillxie9:51 6 Aug '04  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 3 Aug 2004
Editor: Smitha Vijayan
Copyright 2004 by billxie
Everything else Copyright © CodeProject, 1999-2009
Web20 | Advertise on the Code Project