Creating DataGrid Templated Columns Dynamically - Part II

原创 2003年04月08日 09:05:00

Introduction

In previous part of this article we saw how to use LoadTemplate method to dynamically add templated columns to the DataGrid. In this part we will see how to do that using ITemplate interface.

ITemplate Interface

This interface found in System.Web.UI namespace has one method with following signature.
void InstantiateIn(Control container);
This method must be implemented in order to decide 'parent' of the template.

Implementing ITemplate interface

Let us start by creating our own implementation of ITemplate. Create a new class and add following code to it:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

namespace DynamicDataGridTemplates
{
public class CTemplateColumn:ITemplate
{
	private string colname;

	public CTemplateColumn(string cname)
	{
		colname=cname;
	}

	//must implement following method
	public void InstantiateIn(Control container)
	{
		LiteralControl l = new LiteralControl();
		l.DataBinding += 
		new EventHandler(this.OnDataBinding);
		container.Controls.Add(l);
	}

	public void OnDataBinding(object sender, EventArgs e)
	{
		LiteralControl l = (LiteralControl) sender;
		DataGridItem container = 
		(DataGridItem) l.NamingContainer;
		l.Text = 
		((DataRowView)
		container.DataItem)[colname].ToString();
	}
}
}
Here, the constructor accepts the column name to which we want to bind our templated column. We have created a literal control in the InstantiateIn method. Since our column will be data bound we add OndataBinding event handler that populates the control with the appropriate values. Then we add this literalcontrol to the container's controls collection. In the OnDataBinding event handler the NamingContainer gives the current DataGridItem (since our parent control is DataGrid).

Adding a template column to the DataGrid

Now, let us use our implementation of ITemplate interface to add a templated column to the DataGrid. Add following code in the page_Load event.
DataGrid datagrid1=new DataGrid();
TemplateColumn tc1=new TemplateColumn();
tc1.ItemTemplate=new CTemplateColumn("lastname");
tc1.HeaderText="Last Name";
datagrid1.Columns.Add(tc1);
Page.Controls[1].Controls.Add(datagrid1);

string connstr = 
@"Integrated Security=SSPI;User ID=sa;Initial 
Catalog=Northwind;Data Source=MyServer/NetSDK";
SqlConnection cnn=new SqlConnection(connstr);
SqlDataAdapter da=
new SqlDataAdapter("select * from employees", cnn)
DataSet ds=new DataSet();
da.Fill(ds, "employees");

datagrid1.DataSource = ds;
datagrid1.DataMember = "employees";
datagrid1.DataBind();
Here, we have create instance of DataGrid class. We have crerated instance of TemplateColumn class. Our intention is to add a templated column whose ItemTemplate is as decided by our class. Hence we set ItemTemplate property. In the same manner you can also set EditItemTemplate. We have passed the column name (lastname) in the constructor of this class. We then add this column to the DataGrid and DataGrid to the page. Binding of DataGrid follows as usual.

After running your application you should get a DataGrid with single templated column titled 'Last Name'.

Summary

In this article we saw how to add a templated column to a DataGrid on the fly using ITemplate interface. We created a custom class that implemented this interface We then set this class as ItemTemplate for the DataGrid. As you see this method though a bit complex gives more overall control on the process.

About the author

Name :

Bipin Joshi

Email :

webmaster@dotnetbips.com

Profile :

Bipin Joshi - the creator and owner of DotNetBips - is a Microsoft MVP, Software Developer and Author. He has written dozens of articles for DotNetBips and other web sites. Know more about him and DotNetBips here.

Creating DataGrid Templated Columns Dynamically -

  • zgqtxwd
  • zgqtxwd
  • 2008年05月01日 04:21
  • 90

Creating DataGrid Templated Columns Dynamically - Part I

IntroductionFew months back I wrote article on how to create DataGrid programatically. The article e...
  • qieyj
  • qieyj
  • 2003年04月08日 09:05
  • 1040

webwervice发布时出错 java.security.PrivilegedActionException

错误信息: 信息: Dynamically creating response wrapper bean Class com.potevio.ws.jaxws.DealReqResponse ...
  • zc707212993
  • zc707212993
  • 2013年08月26日 21:05
  • 779

Dynamically Creating Bound and Template Columns in GridView

Introduction: There are situations when you need the...
  • yangyibang
  • yangyibang
  • 2007年09月23日 20:51
  • 501

easyui datagrid 动态表头 动态columns 的一种实现方式

function doUpgradeDataQueryFun(){ var actTypeVal=$("#actType").combobox('getValue'); var actIdVa...
  • big1989wmf
  • big1989wmf
  • 2017年04月12日 16:38
  • 1676

使用easyUI 动态改变datagrid的columns

@author YHC DataGrid 列可以使用'columns' 属性简单的定义,如果你想动态的改变columns,那根本没有问题,改变columns ,你可以重新调用datagrid 方...
  • yhc13429826359
  • yhc13429826359
  • 2012年08月10日 10:10
  • 10681

easyui datagrid columns的field支持属性的子属性(field.sonfield形式或者格式化程序形式)

所谓为了支持某属性的子属性,主要为了解决。在服务器返回的json格式的数据的某个属性带有自属性,而我们恰恰又需要使用到该子属性作为我们的datagrid的某个字段的。默认情况下datagrid只能支持...
  • waysoflife
  • waysoflife
  • 2014年06月19日 16:28
  • 2116

springmvc+easyui datagrid columns的field支持属性的子属性(field.sonfield形式或者格式化程序形式)

支持某属性的子属性,也就是相当于实体类中又有一个实体类,要去访问第二个实体类的属性,主要为了解决。在服务器返回的json格式的数据的某个属性带有自属性,而我们恰恰又需要使用到该子属性作为我们的data...
  • qq_35572020
  • qq_35572020
  • 2016年11月24日 16:32
  • 795

让datagrid中的columns属性支持对象的子属性(类似user.userName)的方法

前台的datagrid的columns属性如下:(请看红色字体部分) columns : [ [ {  //每列上的属性、名称设置             title : '编号',    ...
  • wangcunhuazi
  • wangcunhuazi
  • 2015年02月01日 12:39
  • 2972

easyui datagrid columns 如何取得json 内嵌对象

列(Column)的特性 DataGrid 的 Column 是一个数组对象,它的每个元素也是一个数组。数组元素的元素是一个配置对象,它定义了每个列的字段。 代码示例: 复制代码 代码如下...
  • ouou009
  • ouou009
  • 2012年06月18日 23:12
  • 6231
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Creating DataGrid Templated Columns Dynamically - Part II
举报原因:
原因补充:

(最多只允许输入30个字)