Creating a Default Template : CompositeControl « Custom Controls « ASP.NET Tutorial






File: ArticleWithDefault.cs

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace myControls
{
    public class ArticleWithDefault : CompositeControl
    {
        private string _title;
        private string _author;
        private string _contents;

        private ITemplate _itemTemplate;

        public string Title
        {
            get { return _title; }
            set { _title = value; }
        }

        public string Author
        {
            get { return _author; }
            set { _author = value; }
        }

        public string Contents
        {
            get { return _contents; }
            set { _contents = value; }
        }

        [TemplateContainer(typeof(ArticleWithDefault))]
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public ITemplate ItemTemplate
        {
            get { return _itemTemplate; }
            set { _itemTemplate = value; }
        }

        protected override void CreateChildControls()
        {
            if (_itemTemplate == null)
                _itemTemplate = new ArticleDefaultTemplate();
            _itemTemplate.InstantiateIn(this);
        }
    }

    public class ArticleDefaultTemplate : ITemplate
    {
        public void InstantiateIn(Control container)
        {
            Label lblTitle = new Label();
            lblTitle.DataBinding += new EventHandler(lblTitle_DataBinding);

            Label lblAuthor = new Label();
            lblAuthor.DataBinding += new EventHandler(lblAuthor_DataBinding);

            Label lblContents = new Label();
            lblContents.DataBinding += new EventHandler(lblContents_DataBinding);
            container.Controls.Add(lblTitle);
            container.Controls.Add(new LiteralControl("<br />"));
            container.Controls.Add(lblAuthor);
            container.Controls.Add(new LiteralControl("<br />"));
            container.Controls.Add(lblContents);
        }

        void lblTitle_DataBinding(object sender, EventArgs e)
        {
            Label lblTitle = (Label)sender;
            ArticleWithDefault container = (ArticleWithDefault)lblTitle. NamingContainer;
            lblTitle.Text = container.Title;
        }

        void lblAuthor_DataBinding(object sender, EventArgs e)
        {
            Label lblAuthor = (Label)sender;
            ArticleWithDefault container = (ArticleWithDefault)lblAuthor. NamingContainer;
            lblAuthor.Text = container.Author;
        }

        void lblContents_DataBinding(object sender, EventArgs e)
        {
            Label lblContents = (Label)sender;
            ArticleWithDefault container = (ArticleWithDefault)lblContents. NamingContainer;
            lblContents.Text = container.Contents;
        }

    }

}

File: Default.aspx

<%@ Page Language="C#" %>
<%@ Register TagPrefix="custom" Namespace="myControls" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">

    void Page_Load()
    {
        ArticleWithDefault1.Title = "Creating Templated Databound Controls";
        ArticleWithDefault1.Author = "AAA";
        ArticleWithDefault1.Contents = "content";
        ArticleWithDefault1.DataBind();
    }

</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Article with Default Template</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    <custom:ArticleWithDefault
        id="ArticleWithDefault1"
        Runat="server" />

    </div>
    </form>
</body>
</html>








14.20.CompositeControl
14.20.1.Building Composite Controls
14.20.2.Building Hybrid Controls
14.20.3.Performing layout with an HTML table.
14.20.4.Item Rotator
14.20.5.Image Rotator
14.20.6.Creating a Default Template
14.20.7.File: Product.cs
14.20.8.Supporting Two-Way Databinding
14.20.9.Creating Templated Databound Controls