Creating DataGrid Templated Columns Dynamically - Part II
来源:互联网 发布:yum 卸载 排除 依赖包 编辑:程序博客网 时间:2024/05/01 01:08
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 methodpublic 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 : | |
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 - Part II
- Creating DataGrid Templated Columns Dynamically - Part I
- Creating DataGrid Templated Columns Dynamically -
- Creating GridView Columns Dynamically (Part 1)--动态创建GridView的列(一)
- Dynamically Creating Bound and Template Columns in GridView
- Dynamically creating bound and template columns in GridView using ASP.Net
- datagrid非 templated column中取出值
- Creating ASP.NET Controls Dynamically
- Dynamically Adding Template columns to a GridView
- Creating Lookup Columns using CAML
- Creating and deleting threads dynamically in eCos
- python 'type' - dynamically creating a class
- Dragging and Dropping DataGrid Columns
- Dragging and Dropping DataGrid Columns
- WPF DataGrid DataGrid.Columns 使用笔记
- Android: creating two columns in a linearlayout
- Creating RTS Game With Unity3d(Chinese Edition) Part II 使用Unity3d制作即时战略游戏
- Creating a Scrollable DataGrid...
- Windows外壳名字空间的浏览
- 屏蔽CHtmlView/WebBrower控件右键菜单技巧合集
- 如何在ASP环境下利用SOAP来调用C#开发的Web Services
- Changing Target Web Service At Runtime
- Creating DataGrid Templated Columns Dynamically - Part I
- Creating DataGrid Templated Columns Dynamically - Part II
- 如何在代码中动态添加按钮控件
- Binding a DataGrid to an ADO Recordset
- 在C#里实现DATAGRID的打印预览和打印
- datagrid技巧之一:代码控制选中行的颜色
- ASP.NET工程中日历控件的典型应用之一
- 利用XMLHTTP 从其他页面获取数据
- 如何把ini文件转换为xml
- 在.NET中操作XmlDocument