2017网站制作报价单,成都销售型网站,行业门户型网站,中华网我们知道DataGrid#xff0c;DataList等控件都有Template列#xff0c;我们可以通过动态的邦定模版列来实现#xff0c;复杂逻辑的邦定。由于Page继承TemplateControl#xff0c;所以在Page对象里面就可以使用TemplateControl类里面的方法LoadTemplate#xff0c;我们可以… 我们知道DataGridDataList等控件都有Template列我们可以通过动态的邦定模版列来实现复杂逻辑的邦定。由于Page继承TemplateControl所以在Page对象里面就可以使用TemplateControl类里面的方法LoadTemplate我们可以利用这个方法加载指定路径用户控件来实现丰富的表示顺便提一下还有一个LoadControl的方法和LoadTemplate有相同的参数类型也就是说我们可以利用LoadControl方法动态的加载用户控件可以实现自定义的用户界面将页面元素分成一些小的用户控件可以根据用户的定义来加载我们还可以实现Itemplate接口实现摸版列的动态邦定。 1、使用LoadTemplate实现 ITemplate temp Page.LoadTemplate(control1.ascx); TemplateColumn tcnew TemplateColumn(); tc.HeaderText Last Name; tc.ItemTemplate temp; GridView1.Columns.Add(tc); GridView1.DataSource ds; GridView1.DataMember title; GridView1.DataBind(); 我们声明一个Itemplate类型的对象temp用来装载邦定的用户控件。我们在声明一个TemplateColumn来动态创建一个模版列接下来我们给该模版列添加信息其中包括HeaderText等等由于我们将要邦定的事ItemTemplate所以我们将刚才装载的temp赋值给该模版列的ItemTemplate对象最后我们就将新的摸版列添加到GridView里面并邦定数据。 2、使用Itemplate实现 上面我们使用LoadTemplate实现动态摸版列的邦定接下来我们将使用Itemplate接口来实现。Itemplate接口有一个方法InstantiateIn(Control container)。这个方法必须指定摸版列的父亲控件。下面的代码将会实现Itemplate接口我们使用下面的代码创建一个新的类 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){ colnamecname; } //为了使用接口必须实现的方法 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(); } } } 在构造函数里面我们为邦定列指定了列名。我们使用InstantiateIn创建了一个LiteralControl控件l同我们为这个控件添加事件邦定事件这样我们可以在邦定DataGrid的时候可以处理邦定这个控件同时为了实现事件邦定事件我们还编写了事件处理函数OnDataBinding在这里我们将用指定的列邦定数据。 接下来我们将我们的自定义的摸版列动态的添加到DataGrid里面如下的代码是Page_Load里面的 DataGrid datagrid1new DataGrid(); TemplateColumn tc1new TemplateColumn(); tc1.ItemTemplatenew CTemplateColumn(lastname); tc1.HeaderTextLast Name; datagrid1.Columns.Add(tc1); Page.Controls[1].Controls.Add(datagrid1); string connstr Integrated SecuritySSPI;User IDsa;Initial CatalogNorthwind;Data SourceMyServer/NetSDK; SqlConnection cnnnew SqlConnection(connstr); SqlDataAdapter danew SqlDataAdapter(select * from employees, cnn) DataSet dsnew DataSet(); da.Fill(ds, employees); datagrid1.DataSource ds; datagrid1.DataMember employees; datagrid1.DataBind(); 首先我们New一个DataGrid出来然后声明一个模版列tc1在设置tc1的ItemTemplate为我们自定一个模版列不要忘了用列名这个参数然后指定这个模版列的其他信息最后利用DataSet邦定数据不要忘了将控件添加到它的父控件里面比如datagrid1.Columns.Add(tc1);。 上面介绍了两种动态邦定模版列的方法希望可以对初学者有所帮助其实这里的方法是很简单的我想这里最关键的问题是如何理解面向对象希望通过这篇文章的描述初学者可以对面向对象有更好的理解我们这里使用了接口的继承以及父类子类之间的关系通过使用接口的继承我们可以制作一个模版列的工厂可以使用同一种模式产生不同的模版列因为我们使用的是接口详细信息请见《设计模式》。