How to Create and Apply Templates to Controls Dynamically

We already discuss about create template in .aspx page. Today we will learn, create template dynamically (using class). There are lots of steps to follow
Step-1 : Create a MyTemplate class , which is implement from ITemplate interface

public class MyTemplate : ITemplate
{
}

Here ITemplate interface create ASP.NET template.

Step-2 : Declare ListItemType enum variable in the class

ListItemType templateType;

Step-3 : Initialize variable in class constructor, which you want to take in Repeater control like HeaderTemplate, Item Template, Footer Template etc.

public MyTemplate(ListItemType type)
    {
        templateType = type;
    }

Step-4 : Define InstantiateIn method ( for more detail use link ) with proper template view
Step-5 : Bind Repeater Control through DataBinder class.

Full MyTemplate.cs file code


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI;

/// <summary>
/// Summary description for MyTemplate
/// </summary>
public class MyTemplate :ITemplate
{
    ListItemType templateType;
    public MyTemplate(ListItemType type)
    {
        templateType = type;
    }

    public void InstantiateIn(Control container)
    {
        PlaceHolder ph = new PlaceHolder();
        Label item1 = new Label();
        Label item2 = new Label();
        item1.ID = "item1";
        item2.ID = "item2";

        switch (templateType)
        {
            case ListItemType.Header:
                ph.Controls.Add(new LiteralControl("<table border=\"1\">" +
                    "<tr><td><b>sno</b></td>" +
                    "<td><b>Name</b></td></tr>"));
                break;
            case ListItemType.Item:
                ph.Controls.Add(new LiteralControl("<tr><td>"));
                ph.Controls.Add(item1);
                ph.Controls.Add(new LiteralControl("</td><td>"));
                ph.Controls.Add(item2);
                ph.Controls.Add(new LiteralControl("</td></tr>"));
                ph.DataBinding += new EventHandler(Item_DataBinding);
                break;
            case ListItemType.AlternatingItem:
                ph.Controls.Add(new LiteralControl("<tr bgcolor=\"lightblue\"><td>"));
                ph.Controls.Add(item1);
                ph.Controls.Add(new LiteralControl("</td><td>"));
                ph.Controls.Add(item2);
                ph.Controls.Add(new LiteralControl("</td></tr>"));
                ph.DataBinding += new EventHandler(Item_DataBinding);
                break;
            case ListItemType.Footer:
                ph.Controls.Add(new LiteralControl("</table>"));
                break;
        }
        container.Controls.Add(ph);
    }
    static void Item_DataBinding(object sender, System.EventArgs e)
    {
        PlaceHolder ph = (PlaceHolder)sender;
        RepeaterItem ri = (RepeaterItem)ph.NamingContainer;
        Int32 item1Value = (Int32)DataBinder.Eval(ri.DataItem, "sno");
        String item2Value = (String)DataBinder.Eval(ri.DataItem, "Name");
        ((Label)ph.FindControl("item1")).Text = item1Value.ToString();
        ((Label)ph.FindControl("item2")).Text = item2Value;
    }


Step-6 : Take a Web Form (.aspx) page, place Repeater control on it.
Step-7 : Bind Repeater control on Page_Load event.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;

public partial class Default3 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
       SqlConnection conn =new SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);

        SqlDataAdapter DA;
        DataSet DS;

        DA = new SqlDataAdapter("SELECT * FROM [userdata]", conn);
        DS = new DataSet();

        Repeater1.HeaderTemplate = new MyTemplate(ListItemType.Header);
        Repeater1.ItemTemplate = new MyTemplate(ListItemType.Item);
        Repeater1.AlternatingItemTemplate =new MyTemplate(ListItemType.AlternatingItem);
        Repeater1.FooterTemplate = new MyTemplate(ListItemType.Footer);
        DA.Fill(DS, "userdata");
        Repeater1.DataSource = DS.Tables["userdata"];
        Repeater1.DataBind();
    }
}

Code Generate the following output

How to Create and Apply Templates to Controls Dynamically

Comments

Popular posts from this blog

difference between structure and union in C Language

Difference between Linear search and Binary Search in c language

Difference between static and dynamic websites