![]() |
Web Development »
ASP.NET Controls »
General
Intermediate
License: The Code Project Open License (CPOL)
DataGrid Template Columns creation in Runtime (using C#) and DataBindingBy R. Senthil KumaranCreating Template Columns in runtime and data binding. |
C#, VB.NET 1.1, Win2003, ASP.NET, Visual Studio, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
Here is a code where you can create a DataGrid at runtime with Template Columns with all types of templates (ItemTemplate, EditItemTemplate, HeaderTemplate, FooterTemplate) and also bind the templates with data.
Creating a grid dynamically with bound columns and even with Button column is simple, but with Template columns, it is quite complicated. Here is a clean solution for the same. :)
ITemplate for creating templates.
ItemDataBound event.
dgRt.ID="dgRt1";//Grid Settings
dgRt.AutoGenerateColumns=true;
dgRt.AllowPaging=true;
dgRt.ShowFooter=true;
dgRt.ShowHeader=true;
declare Columns:
BoundColumn bcl1 = new BoundColumn();
//columns Decalration
TemplateColumn tcl1 = new TemplateColumn();
TemplateColumn tcl2 = new TemplateColumn();
TemplateColumn tcl3 = new TemplateColumn();
TemplateColumn tcl4 = new TemplateColumn();
TemplateColumn tcl5 = new TemplateColumn();
TemplateColumn tcl6 = new TemplateColumn();
TemplateColumn tcl7 = new TemplateColumn();
TemplateColumn tcl8 = new TemplateColumn();
TemplateColumn tcl9 = new TemplateColumn();
TemplateColumn tcl10 = new TemplateColumn();
TemplateColumn tcl11 = new TemplateColumn();
EditCommandColumn ecol1=new EditCommandColumn();
You need to write a separate class file which inherits the ITemplate interface to create the templates. We have to create a method InstantiateIn which is necessary because of the inheritance from the Itemplate. This gives you the column created with the specified control needed to be added in it. Create an event DataBinding for the control being created and specify all the actions that need to be done there.
Here, I am writing a code to create an EditItemTemplate column with drop down list box, and the attached code contains many classes for controls like TextBox, CheckBox, LinkButton, PushButton, and many more...
public class CreateItemTemplateDDL : ITemplate
{
DataTable dtBind;
string strddlName;
string strDataValueField;
string strDataTextField;
Here, I added the constructor for creating the DDL with value member and text member.
public CreateItemTemplateDDL(string DDLName,
string DataValueField, string DataTextField, DataTable DDLSource)
{
this.dtBind=DDLSource;
this.strDataValueField=DataValueField;
this.strDataTextField=DataTextField;
this.strddlName=DDLName;
}
Here is the code for declaring DataBinding event for the DDL being added. This occurs while DataGrid is being bound.
public void InstantiateIn(Control objContainer)
{
DropDownList ddl = new DropDownList();
ddl.DataBinding+=new EventHandler(ddl_DataBinding);
objContainer.Controls.Add(ddl);
}
Here, you can assign all the properties and every thing else required for the DDL.
private void ddl_DataBinding(object sender, EventArgs e)
{
DropDownList ddl= (DropDownList)sender;
ddl.ID=strddlName;
ddl.DataSource=dtBind;
ddl.DataValueField=strDataValueField;
ddl.DataTextField=strDataTextField;
//ddl.DataBind();
}
More control classes are available in the download. Likewise, you can add more controls to your DataGrid calling the specified classes.
For using this class:
tcl7.ItemTemplate= new CreateItemTemplateDDL("ddlGrid","ID","UserName",dt);
Here, you have added the DDL for the ItemTemplate. You may call the same even if you want a DDL in EditITemTemplate, FooterTemplate, as well in HeaderTemplate too.
dgRt.Columns.Add(tcl1);
dgRt.Columns.Add(tcl2);
dgRt.Columns.Add(tcl3);
dgRt.Columns.Add(tcl4);
dgRt.Columns.Add(tcl5);
dgRt.Columns.Add(tcl6);
dgRt.Columns.Add(tcl7);
dgRt.Columns.Add(tcl8);
dgRt.Columns.Add(tcl9);
dgRt.Columns.Add(tcl11);
dgRt.Columns.Add(ecol1);
dgRt.Columns.Add(bcl1);
Here by, you have added all the columns to the grid.
After creating grid, if you wish to have some events for it, say you want to bind the grid, then you need to create a ItemDataBound column, need a pager, then have PagedindexChanged event.
dgRt.ItemDataBound+=new DataGridItemEventHandler(dgRt_ItemDataBound); dgRt.ItemCommand+=new DataGridCommandEventHandler(dgRt_ItemCommand); dgRt.PageIndexChanged+=new DataGridPageChangedEventHandler(dgRt_PageIndexChanged); dgRt.EditCommand+=new DataGridCommandEventHandler(dgRt_EditCommand); dgRt.UpdateCommand+=new DataGridCommandEventHandler(dgRt_UpdateCommand); dgRt.CancelCommand+=new DataGridCommandEventHandler(dgRt_CancelCommand);
Fill the grid by pulling the data from the database.
private void fillgrid() { SqlConnection cn = new SqlConnection(); SqlCommand cmd = new SqlCommand(); cmd.Connection=cn; cmd.CommandText="select * from SmpTable order by cm"; DataSet ds = new DataSet(); SqlDataAdapter adp = new SqlDataAdapter(cmd); cn.ConnectionString= "SERVER=SQLSERVERNAME;DATABASE=TestProject;UID=abcd;PWD=alskdjfh"; try { cn.Open(); adp.Fill(ds); dgRt.DataSource=ds.Tables[0]; dgRt.DataBind(); cn.Close(); } catch (Exception ex) { lblError.Text="Error Occured"; } }
private void dgRt_ItemDataBound(object sender, DataGridItemEventArgs e)
{
if((e.Item.ItemType==ListItemType.Item ) ||
(e.Item.ItemType==ListItemType.AlternatingItem))
{
DropDownList ddlSmp=((DropDownList)e.Item.Cells[7].FindControl("ddlGrid"));
ddlSmp.DataSource=.DataSource=dt;//your Data Table Name
ddlSmp.DataValueField="empid";
ddlSmp.DataTextField="EmpName";
}
}
That's it! Now, the grid is ready for you.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 29 May 2004 Editor: Smitha Vijayan |
Copyright 2004 by R. Senthil Kumaran Everything else Copyright © CodeProject, 1999-2009 Web15 | Advertise on the Code Project |