我们知道DataGrid,DataList等控件都有Template列,我们可以通过动态的邦定模版列来实现,复杂逻辑的邦定。由于Page继承TemplateControl,所以在Page对象里面就可以使用TemplateControl类里面的方法LoadTemplate,我们可以利用这个方法加载指定路径用户控件来实现丰富的表示(顺便提一下还有一个LoadControl的方法和LoadTemplate有相同的参数类型,也就是说我们可以利用LoadControl方法动态的加载用户控件,可以实现自定义的用户界面,将页面元素分成一些小的用户控件可以根据用户的定义来加载),我们还可以实现Itemplate接口实现摸版列的动态邦定。

1、使用LoadTemplate实现:
ITemplate temp= Page.LoadTemplate("control1.ascx");
TemplateColumn tc=new 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){
              colname=cname;
       }
       //为了使用接口必须实现的方法
       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 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();
首先我们New一个DataGrid出来,然后声明一个模版列tc1,在设置tc1的ItemTemplate为我们自定一个模版列(不要忘了用列名这个参数),然后指定这个模版列的其他信息,最后利用DataSet邦定数据(不要忘了将控件添加到它的父控件里面,比如:datagrid1.Columns.Add(tc1);)。
上面介绍了两种动态邦定模版列的方法,希望可以对初学者有所帮助,其实这里的方法是很简单的,我想这里最关键的问题是如何理解面向对象,希望通过这篇文章的描述初学者可以对面向对象有更好的理解,我们这里使用了接口的继承以及父类子类之间的关系,通过使用接口的继承我们可以制作一个模版列的工厂可以使用同一种模式产生不同的模版列,因为我们使用的是接口(详细信息请见《设计模式》)。

GridView中动态生成ItemTemplate模板列相关推荐

  1. Java动态生成excel模板文件(包含列下拉)

    1.添加依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency><gr ...

  2. word文档中动态生成excel表格(基金公告系列讲解)

    1.本博文仅为了将之前工作中动态生成XBRL文件需求中word文档动态生成excel部分进行了实现(虽然隔着时间比较久),闲暇之余的考虑,应对大批量文件生成时可采用定时任务+多线程技术+redis队列 ...

  3. 使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图)

    使用POI在Excel中动态生成图表工具类 使用POI在Excel中动态生成图表工具类 由于公司是一个生成报表的机构,之前一直使用pageOffice,但是公司领导就是不买,你说公司那样有钱磨磨唧唧干 ...

  4. android 动态显示表格,在Android Studio中动态生成并显示表格

    我在Android上创建我的第一个应用程序,因此我有低开发android应用程序的经验,而且我也是第一次使用java.在Android Studio中动态生成并显示表格 我想要什么? 我想从Array ...

  5. R语言使用keras包实现卷积自动编码器模型(Convolutional Autoencoder)、加载keras自带的mnist数据集、训练中动态生成每个epoch后模型训练的loss曲线

    R语言使用keras包实现卷积自动编码器模型(Convolutional Autoencoder).加载keras自带的mnist数据集.训练中动态生成每个epoch后模型训练的loss曲线 目录

  6. JAVA动态生成excel模板;列自定义下拉框赋值

    哈喽,2023大家开工大吉啊!财源滚滚! 业务需求:需要生成excel模板,且对部分列设置下拉框,进行动态赋值,效果如下: 拿上图举例:针对省这一列,不是填写,而是选择数据,也就是说我们生成excel ...

  7. 在JSP中动态生成随机验证码,登录时后台校验验证码,以及如何避免同一个验证码被重复提交爆破密码...

    只需几步就可以生成动态随机的验证码,最终效果如下图: 一 前台显示页面login.jsp 其中验证码显示的是一张图片,链接指向的是生成验证码的servlet,同时点击图片后触发changeImg()这 ...

  8. php中type的格式,javascript – 在php中动态生成的输入[type = date]格式值

    我有一个动态生成值的输入 为了支持html5日期输入,日期格式为yyyy-mm-dd分配给该值,mm / dd / yyyy格式正确显示在html5浏览器中. 问题出现在非html5浏览器上,其中赋值 ...

  9. 安卓中动态生成界面布局

    在项目设计和安卓程序开发过程中有时候我们需要试用编程动态生成界面,这样的好处是可以先读取屏幕大小然后动态生成满足屏幕大小的程序,本例的程序最终实现效果如下:例子为一个点菜初界面,左右滑动手指可以实现菜 ...

最新文章

  1. “大众搬家”何其多啊?[3/14/2007 update]
  2. Elasticsearch Top 51 重中之重面试题及答案
  3. Python与R的区别和联系
  4. UVA 1210 Sum of Consecutive Prime Numbers
  5. Condition - Java多线程编程
  6. 浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)
  7. WINFORM如何只弹出一个子窗体
  8. visual studio 安装教程
  9. uni-app 2.2 发布,大幅度优化 H5 端性能体验 | 技术头条
  10. Java高质量20问
  11. c语言中两整数相除保留小数的方法
  12. 迅雷精简版 Mac中文版
  13. java 死链检测_网站死链检测工具/网站地图生成工具
  14. 网赚APP资源下载类网站源码
  15. Kent Beck : 领导的敏捷潮
  16. 【Android实战】----基于Retrofit实现多图片/文件、图文上传
  17. Java Vector API的使用测试
  18. 责任链设计模式介绍及实战
  19. ArcGIS 中的标准分类方法(相等、分位、自然断裂、标准差)
  20. linux下创建nginx虚拟目录详解,通过Samba映射Linux磁盘作为Windows IIS的虚拟目录--梦飞翔的地方(梦翔天空)...

热门文章

  1. 51单片机入门——矩阵键盘(附51代码)
  2. vue 自定义指令 directives
  3. for循环的执行顺序,i++和++i
  4. 如何评价唐卫国公李靖的战功、军事才能、政治才能?
  5. outlook计算机应用基础,计算机应用基础--outlook操作题1
  6. 01-无线传感器网络(WSN)简介
  7. 主成分分析——PCA
  8. numpy.random.rand(d0,d1....,dn)和numpy.random.randint()
  9. Python爬虫 - 获取网页编码
  10. 微信小程序开发学习第二天 按部就班的名片小程序