使用自定义模板类增加TemplateField(重要)

使用自定义模板类增加TemplateField(重要) 现在你已经知道了如何使用LoadTemplate()方法,接下来让我们来看看如何使用另一种方法。在最后的例子中你学到了用LoadTemplate()方法返回一个实现了Itemplate接口的对象。你自己也可以创建这样一个实现了Itemplate接口的类并直接使用它,从而代替LoadTemplate()方法。 我们在App_Code文件夹内新建一个名为MyTemplate的类。其关键代码如下。 public class MyTemplate:ITemplate { private string colname; public MyTemplate(string colname) { this.colname = colname; } 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; GridViewRow container = (GridViewRow)l.NamingContainer; l.Text = ((DataRowView)container.DataItem)[colname].ToString(); } } 这段代码创建了一个实现了Itemplate接口的名为MyTemplate的类。这个接口只包含一个你必须实现的方法 - InstantiateIn()。这段代码声明了一个变量用来保存被显示的列的名称,该名称在类的构造函数中设置,然后实现InstantiateIn()方法。该方法的参数为一个容器类型或父控件类型的控件的对象。在这里,我们创建了一个LiteralControl和一个DataBinding事件(OnDataBinding)。这个事件在容器控件调用DataBind()方法时发生。然后把这个LiteralControl加到容器控件的控件集合中。 OnDataBinding()事件所作的工作就是把所需的数据绑定到LiteralControl。给容器控件加上NamingContainer属性,然后提取出一个Row。最后,LiteralControl的Text属性被设置为构造函数所指出的列的在数据库中所存储的值。这样,我们的自定义模板类就完成了。 在website里新建一个webform。像以前一样拖拽一个GridView和SqlDataSouce到页上。其Page_Load事件中的代码如下。 protected void Page_Load(object sender, EventArgs e) { SqlDataSource1.ConnectionString = @"data source=.;initial catalog= northwind;integratedsecurity=true"; SqlDataSource1.SelectCommand = "select employeeID,FirstName,LastName from employees"; if (!IsPostBack) { GridView1.DataSourceID = "SqlDataSource1"; GridView1.AutoGenerateColumns = false; TemplateField tf1 = new TemplateField(); MyTemplate t1 = new MyTemplate("FirstName"); tf1.HeaderText = "First Name"; tf1.ItemTemplate = t1; TemplateField tf2 = new TemplateField(); MyTemplate t2 = new MyTemplate("LastName"); tf2.HeaderText = "Last Name"; tf2.ItemTemplate = t2; GridView1.Columns.Add(tf1); GridView1.Columns.Add(tf2); } } 这段代码如从前一样设置了GridView和SqlDataSource的属性。注意代码中加粗的部分(译者注:就是代码的中下部份),它是用来创建TemplateField类的实体的。这次TemplateField的ItemTemplate属性被设置成了实例化的MyTemplate类。列的名称 - FirstName和LastName被传到了构造函数中。TemplateField被增加到了GridView的列集合中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值