Click here to Skip to main content
11,798,866 members (61,158 online)
Click here to Skip to main content

Dynamically Adding Template Columns to a GridView

, 8 Jan 2007 CPOL 170.1K 1.7K 40
Rate this:
Please Sign up or sign in to vote.
How to add template columns dynamically to a GridView.


Many a times we wonder how to add a template column dynamically. This might be the case when the number of columns, column types etc., cannot be decided during design time. For example, if the data source of a GridView control will be retrieved from a Business Layer, when designing the GridView user interface, the developer can not determine the number of columns and other things related to column description. In such a case, the GridView will be configured to generate columns automatically at runtime. Adding template columns at runtime was not possible in earlier versions of .NET, i.e., 1.0. With the new version of .NET 2.0 onwards, there is a facility to add template columns at runtime dynamically.

For the above purpose, I have created a class DynamicTemplate inheriting the ITemplate interface.

public class DynamicTemplate : System.Web.UI.ITemplate

Now the very first step is to implement the constructor for the class:

public DynamicTemplate(System.Web.UI.WebControls.ListItemType type)
    templateType = type;

Here I have passed ListItemType as a parameter to the constructor, which will define the type of the current template. I.e., the template can be a Header, Item, AlternatingItem, or Footer.

Next, for defining the type of the control template column will be displaying, I have added the following method:

public void AddControl(WebControl wbControl, 
            String BindPropertyName, String BindExpression)
    htControls.Add(htControls.Count, wbControl);
    htBindPropertiesNames.Add(htBindPropertiesNames.Count, BindPropertyName);
    htBindExpression.Add(htBindExpression.Count, BindExpression);

Here we need to pass three parameters: wbcontrol is the reference to any web control which we want our template column to display, BindPropertyName is the property name of the control to be bound, e.g., the Text property for a TextBox or Label control, and BindExpression is the field name or any valid Bind expression to be evaluated and assigned to the BindProperty.

Now for providing template column functionality, we need to implement the 'InstantiateIn' method. This method will be called for every row of the GridView before binding occurs.

public void InstantiateIn(System.Web.UI.Control container)
    PlaceHolder ph = new PlaceHolder();
    for (int i = 0; i < htControls.Count; i++)
        //clone control 
        Control cntrl = CloneControl((Control)htControls[i]);
        switch (templateType)
            case ListItemType.Header:
            case ListItemType.Item:
            case ListItemType.AlternatingItem:
                ph.DataBinding += new EventHandler(Item_DataBinding);
            case ListItemType.Footer:
    ph.DataBinding += new EventHandler(Item_DataBinding);

Here, we first clone the web control so that a new copy can be created, and then we add this new copy to the desired placeholder.

Next, we want to implement this class for adding the template column dynamically:

TemplateField t = new TemplateField();
DynamicTemplate mt = new DynamicTemplate(ListItemType.Item);
TextBox t1 = new TextBox();
t1.ID = "txt";
t1.Visible = true;
t1.Text = "1";
mt.AddControl(t1, "Text", "Sno");

Here we are creating a template column which will display a TextBox. And the Text property of this TextBox will be bound with the Sno data field of the configured data source.

A complete implementation of the above class is attached with this article, which is quite self-explanatory and simple.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Vikramaditya S Shekhawat
India India
Software and technology enthusiast with 15+ years experience in IT industry. Envisage "technical people management" for achieving best results and most satisfied team members.

You may also be interested in...

Comments and Discussions

GeneralComment Pin
loweryk5-Dec-14 5:42
memberloweryk5-Dec-14 5:42 
Questioni want to create grid view col like days of months like aug 1 to 31 and col name is also 1to 31 Pin
ganew24-Aug-14 20:12
memberganew24-Aug-14 20:12 
QuestionGirdView next page action the dynamic template column values not visible Pin
Mahesh200927-Aug-13 4:27
memberMahesh200927-Aug-13 4:27 
General[My vote of 2] Link button header - Commnad event not fire........... Pin
Sanjay g. Patel31-May-11 2:02
memberSanjay g. Patel31-May-11 2:02 
GeneralHaving Period (or dot) in column name Pin
farhan1405-Apr-11 23:56
memberfarhan1405-Apr-11 23:56 
GeneralBinding problem with radio button list Pin
imrajanc18-Jan-10 21:09
memberimrajanc18-Jan-10 21:09 
GeneralPage_Init Pin
Member 212971517-Nov-09 5:33
memberMember 212971517-Nov-09 5:33 
GeneralDynamically adding Template columns to a GridView after closing PopUP window Pin
kshafer30-Oct-09 10:39
memberkshafer30-Oct-09 10:39 
GeneralTexbox appearance problem Pin
Member 591532825-Jul-09 9:21
memberMember 591532825-Jul-09 9:21 
GeneralThanks Pin
arsalan_qamar27-May-09 6:09
memberarsalan_qamar27-May-09 6:09 
GeneralMy vote of 1 [modified] Pin
Wilko Gesink20-Feb-09 16:09
memberWilko Gesink20-Feb-09 16:09 
GeneralRe: My vote of 1 Pin
arsalan_qamar27-May-09 6:06
memberarsalan_qamar27-May-09 6:06 
GeneralRe: My vote of 1 Pin
Vikramaditya S Shekhawat27-Jul-09 23:27
memberVikramaditya S Shekhawat27-Jul-09 23:27 
QuestionDynamically Adding multiple columns Pin
MSwati27-Jan-09 20:08
memberMSwati27-Jan-09 20:08 
AnswerRe: Dynamically Adding multiple columns Pin
phoohtoo21-Aug-15 1:20
memberphoohtoo21-Aug-15 1:20 
QuestionDynamically Adding columns to existing datasource Pin
MSwati18-Jan-09 20:28
memberMSwati18-Jan-09 20:28 
AnswerRe: Dynamically Adding columns to existing datasource Pin
Vikramaditya S Shekhawat20-Jan-09 4:16
memberVikramaditya S Shekhawat20-Jan-09 4:16 
GeneralRe: Dynamically Adding columns to existing datasource Pin
MSwati20-Jan-09 19:00
memberMSwati20-Jan-09 19:00 
Generalgenerate colums of the gridview from the listbox and make a header template dynamically Pin
pratap2k417-Jan-09 2:41
memberpratap2k417-Jan-09 2:41 
GeneralUnable to retrieve value from Text Box that was added dynamically containing Blank Text Pin
anshubansal200021-Nov-08 8:05
memberanshubansal200021-Nov-08 8:05 
Generalrowcommand event is not fire Pin
Tripathi Swati24-Sep-08 20:54
memberTripathi Swati24-Sep-08 20:54 
GeneralRe: rowcommand event is not fire Pin
Sanjay g. Patel30-May-11 22:19
memberSanjay g. Patel30-May-11 22:19 
GeneralDynamically Adding Template columns Pin
sandla31-Jul-08 21:09
membersandla31-Jul-08 21:09 
Generalgrid view Pin
claradaisy14-Jul-08 19:29
memberclaradaisy14-Jul-08 19:29 
Questionadding click events?? Pin
prochaska23-May-08 9:50
memberprochaska23-May-08 9:50 
NewsError assigning integer Column to textbox Pin
Member 7657327-May-08 15:52
memberMember 7657327-May-08 15:52 
QuestionHi! I have added textboxes in gridview dynamically Pin
Abhijit Aitwade21-Feb-08 23:42
memberAbhijit Aitwade21-Feb-08 23:42 
AnswerRe: Hi! I have added textboxes in gridview dynamically Pin
Ashish19786-Sep-08 20:31
memberAshish19786-Sep-08 20:31 
Generalone textbox per column Pin
Craig Graham16-Oct-07 6:26
memberCraig Graham16-Oct-07 6:26 
QuestionPostBack ? Pin
blublu7810-Oct-07 4:24
memberblublu7810-Oct-07 4:24 
AnswerRe: PostBack ? Pin
Craig Graham16-Oct-07 6:28
memberCraig Graham16-Oct-07 6:28 
GeneralRe: PostBack ? Pin
arsalan_qamar27-May-09 6:07
memberarsalan_qamar27-May-09 6:07 
Generaltemplate fields disappeared after postback Pin
chronossu1-Oct-07 23:18
memberchronossu1-Oct-07 23:18 
GeneralHelp with the addControl Method Pin
John Gilmore25-Sep-07 12:27
memberJohn Gilmore25-Sep-07 12:27 
GeneralRe: Help with the addControl Method Pin
John Gilmore26-Sep-07 3:20
memberJohn Gilmore26-Sep-07 3:20 
GeneralProb ... please help Pin
dheeraj dhawan12-Aug-07 21:08
memberdheeraj dhawan12-Aug-07 21:08 
GeneralDatabinding is Giving Problem Pin
Baldev Rawat28-Jul-07 19:31
memberBaldev Rawat28-Jul-07 19:31 
GeneralRe: Databinding is Giving Problem Pin
John Gilmore26-Sep-07 3:19
memberJohn Gilmore26-Sep-07 3:19 
GeneralError with Imagebutton Pin
Joshua Lunsford25-Jul-07 6:09
memberJoshua Lunsford25-Jul-07 6:09 
GeneralRe: Error with Imagebutton Pin
Joshua Lunsford25-Jul-07 6:34
memberJoshua Lunsford25-Jul-07 6:34 
GeneralRe: Error with Imagebutton Pin
John Gilmore26-Sep-07 6:23
memberJohn Gilmore26-Sep-07 6:23 
Generaleasy way to add cols dynamically Pin
muhammadali11-Feb-09 4:39
membermuhammadali11-Feb-09 4:39 
GeneralNot able to add Header to the Row Pin
srvking14-Jun-07 1:55
membersrvking14-Jun-07 1:55 
GeneralRe: Not able to add Header to the Row Pin
manmohanshah17-Sep-08 23:46
membermanmohanshah17-Sep-08 23:46 
Generallayout formating is being removed Pin
kenken071022-May-07 19:54
memberkenken071022-May-07 19:54 
AnswerRe: layout formating is being removed Pin
sdwilly2212-Jun-08 5:58
membersdwilly2212-Jun-08 5:58 
GeneralThanx Pin
Pallavi Bhoite21-May-07 22:05
memberPallavi Bhoite21-May-07 22:05 
Questionhow to add dropdown? Pin
Umer Khan13-Apr-07 2:17
memberUmer Khan13-Apr-07 2:17 
GeneralCan't access the controls in the column Pin
Balaji Iyengar9-Apr-07 0:02
memberBalaji Iyengar9-Apr-07 0:02 
GeneralRe: Can't access the controls in the column Pin
manish_pandey1513-Sep-07 1:15
membermanish_pandey1513-Sep-07 1:15 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.151002.1 | Last Updated 8 Jan 2007
Article Copyright 2007 by Vikramaditya S Shekhawat
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid