C#实现DataGrid(GridView)动态生成列

有时候需要在DataGrid(GridView)里显示的数据列数是不固定的,而且还需要对数列列进行控制,如显示或隐藏,这时我们就不能用DataGrid里的自动生成列,更不能对列做数据绑定了,但我们有个办法,就是动态地生成数据列,DataGrid的动态列其实就是以类的形式存在,功能很强大.

要实现动态列,首先要添加一个类文件,这个类必须要继承ITemplate接口,主要是要实现一个方法:InstantiateIn,在InstantiateIn里做的是对该动态列做事件控制的绑定,如OnDataBinding,OnDataBinding就相当于DataGrid的ItemDataBound事件了,这样就可以对该动态列的每一行做相应处理了.

这样有了动态列,你就可以按某些条件来对列进行相应的控制了,如在配置文件定义他们的个数,哪些该不该显示等等.

具体实现源码如下:

程序代码

public class DynamicColumn:ITemplate
{
    private string colname;
    private int colvalue;
  //构造函数,能传入必要的参数,当然也可属性的方式传入参数
    public DynamicColumn(string p_colname, int p_colvalue)
   {
      colname = p_colname;
      colvalue = p_colvalue;
   }
   //指定了在控件Label lb上做DataBinding事件的绑定
   public void InstantiateIn(Control container)
   {
     Label lb = new Label();
     lb.DataBinding += new EventHandler(this.OnDataBinding);
     container.Controls.Add(lb);
     }
     //这里是我的具体绑定操作,你可以写自己的
     public void OnDataBinding(object sender, EventArgs e)
     {
      Label lb = (Label)sender;
      int AndResult = 0;
         DataGridItem container = (DataGridItem) lb.NamingContainer;
         AndResult = int.Parse(((DataRowView)container.DataItem)[colname].ToString());
      if( AndResult == colvalue)
        lb.Text = "√";
      else
        lb.Text = "";
     }
}

时间: 2024-09-10 11:51:56

C#实现DataGrid(GridView)动态生成列的相关文章

gridview动态生成列,动态添加控件问题

问题描述 在GRIDVEIW的行绑定ROWDATABOUND里生成了N个列,并且往行里的某些单元格里加了DROPDOWNLIST,显示都没问题,但是我一点页面的按钮,本想通过循环GRIDVIEW,找到每一行里的DROPDWNLIST,可是结果是不能找到.而且动态生成的列也没有了.我又把代码放在ROWCREADER事件里创建列,及为列的单元格里增加DROPDOWNLIST,在执行调试时发现原先在页面上的列里放的HIDDEN控件也找不到,后来通过e.Row.DataItem可以取到我我存在HIDDE

GridView动态生成TextBox模板列后如何取值的问题

问题描述 各位好,这个问题以前有人提过了,但是我研究了好几天用到我的程序里就总出现问题,希望高手能够帮帮忙,谢谢!我需要用GridView动态生成列数不固定的模板列,然后在里面添加textbox控件后,由用户输入数值,然后将这些值获取出来.但是我运行到这里就总是出现错误说"既不是表的DataColumn也不是表的DataRelation".代码如下:usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Co

jQuery EasyUI中DataGird动态生成列的方法_jquery

EasyUI中使用DataGird显示数据列表中,有时需要根据需要显示不同的列,例如,在权限管理中,不同的用户登录后只能查看自己权限范围内的列表字段,这就需要DataGird动态组合列,下面介绍EasyUI中DataGird动态生成列的方法. DataGird动态生成列,实际上就是控制DataGird的 columns 属性值,下面通过ajax异步调用后台columns的数据,进行绑定. <table id="dg"></table> <script>

esayui的datagrid如何动态设置列数据

问题描述 esayui的datagrid如何动态设置列数据 我的datagrid中创建了YF1.YF2.....YF12这几个列名,现在想使用for循环为这些列设置值,但是使用updateRow的方法时发现,row里面不能拼字符串变量名,用YF+(i+1)这种形式来设置居然不好使,请教各位怎么解决? var gdata = $('#table').datagrid('getData');for(var i = 0;i<gdata.rows.length;i++){ var name = "

Flex中如何动态生成DataGrid以及动态生成表头_Flex

在Flex中动态生成表格,并且表格的表头也是动态生成 1.源码 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initHandler()" width

GridView动态创建列回发再绑定的解决

先贴代码: protected void Page_Load(object sender, EventArgs e) { this.gvCon.MyBind+=new MyGridView.MyBind_Delegate(Bind); //这一句不用管 !,MyGridView 的需要! if (Page.IsPostBack == false) { Bind(); } } 在 Bind 函数的动态绑定 编辑列. 当点 编辑时, 可以改变为 编辑样式, 但是, 当点击 Update 或 Canc

GridView 自动生成列,添加一个TextBox模板

问题描述 将一个Excel表中的数据导入到GridView,Excel中有一列为名称,导到GridView后,为名称的那一列放在TextBox中,进行修改后再入库,谢谢-!(前提:不知道Excel表中有多少列)

GridView动态添加列的方法及代码

代码如下: protected void Page_Load(object sender, EventArgs e) { TemplateField mycustomField = new TemplateField(); //创建列实例 mycustomField.ShowHeader = true; // 设置属性 LinkButton lb = new LinkButton(); lb.Text = "Delete"; mycustomField.HeaderTemplate =

RDLC报表动态生成列的问题

问题描述 本人在用VS2010做RDLC报表的时候,对指定列的hidden属性,用表达式进行隐藏,目的达到了.但是为什么隐藏后的列不自动缩进,而是有一列空白呈现了出来.很不解这是为什么,希望那个高手能帮忙解答.或者谁可否留个在线交流方式?QQ?MSN?GTALK? 解决方案 解决方案二:[img=http://b83.photo.store.qq.com/psb?/61a58bc3-61f8-453c-a1eb-ddb28f986cda/gYG45Ofmw6j9u5u7QZGYTqqztLMZH