void InstantiateIn(Control container);This method must be implemented in order to decide 'parent' of the template.
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).
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'.
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. |
本文地址:http://com.8s8s.com/it/it45711.htm