Custom Controls ASP.Net Tutorial

File: DivView.cs
using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MyNamespace
{
    public class DivView : CompositeDataBoundControl
    {
        private ITemplate _itemTemplate;
        [TemplateContainer(typeof(DivViewItem))]
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public ITemplate ItemTemplate
        {
            get { return _itemTemplate; }
            set { _itemTemplate = value; }
        }
        protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
        {
            int counter = 0;
            foreach (object dataItem in dataSource)
            {
                DivViewItem contentItem = new DivViewItem(dataItem, counter);
                _itemTemplate.InstantiateIn(contentItem);
                Controls.Add(contentItem);
                counter++;
            }
            DataBind(false);
            return counter;
        }
        protected override HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Div;
            }
        }
    }
    public class DivViewItem : WebControl, IDataItemContainer
    {
        private object _dataItem;
        private int _index;
        public object DataItem
        {
            get { return _dataItem; }
        }
        public int DataItemIndex
        {
            get { return _index; }
        }
        public int DisplayIndex
        {
            get { return _index; }
        }
        protected override HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Div;
            }
        }
        public DivViewItem(object dataItem, int index)
        {
            _dataItem = dataItem;
            _index = index;
        }
    }
}
File: Default.aspx
<%@ Page Language="C#" %>
<%@ Register TagPrefix="custom" Namespace="MyNamespace" %>
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


    
        .products
        {
            width:500px;
        }
        .products div
        {
            border:solid 1px black;
            padding:10px;
            margin:10px;
        }
    
    Show DivView


    
    

            id="lstProducts"
        DataSourceID="srcProducts"
        CssClass="products"
        Runat="Server">
        
        

<%# Eval("Title") %>


        Director: <%# Eval("Director") %>
        

    
            id="srcProducts"
        ConnectionString="<%$ ConnectionStrings:Products %>"
        SelectCommand="SELECT Title, Director FROM Products"
        Runat="server" />
    
            id="lnkReload"
        Text="Reload"
        Runat="server" />