相信大家也和我一样遇到过这种问题,gridview在生成列的时候当列不确定怎么办?下面分享一下自己的解决方法。

举个列子说明一下。

普通列的添加比较简单。

BoundField bf = new BoundField();
            bf.HeaderText = "表头名称";
            bf.DataField = "数据源对应字段名称";

gridview.Columns.Add(bf)

那像TemplateField模板列怎么办?这时候需要自己继承模板接口来重写

public class GridViewCreate:ITemplate
{
    Dictionary<string, string> controlName;
    Dictionary<string,CommandEventHandler> controlEvent;
    Dictionary<string,string>controlImgUrl;
    Dictionary<string, string> controlData;
    DataControlRowType rType;
    /// <summary>
    /// 处理itemplage
    /// T要创建模板的类型
    /// cName为模板控件的名字,键为控件的id值为控件的类型 目前只处理checkbox和imgbutton
    /// cEvent为模块控件对应的事件键为控件id值为控件事件的名字,这里的键要和cName中的键相对应
    /// cImageUrl是图片按钮对应的图片路径键id 值路径
    /// </summary>
    /// <param name="cName"></param>
    /// <param name="cEvent"></param>
    public GridViewCreate(DataControlRowType T, Dictionary<string, string> cName, Dictionary<string, CommandEventHandler> cEvent, Dictionary<string, string> cImgUrl)
    {
        rType = T;
        controlEvent = cEvent;
        controlName = cName;
        controlImgUrl = cImgUrl;
        controlData = cData;
    }
    /// <summary>
    /// 处理header
    /// </summary>
    /// <param name="T"></param>
    public GridViewCreate(DataControlRowType T)
    {
        rType = T;
    }
    #region ITemplate 成员

public void InstantiateIn(Control container)
    {
        if (rType == DataControlRowType.Header)
        {
            HtmlInputCheckBox cb = new HtmlInputCheckBox();
            cb.ID = "chkAll";
            cb.Attributes.Add("runat","server");
            cb.Attributes.Add("onclick", "javascript:SelectAllCheckboxes(this);");
            container.Controls.Add(cb);
        }
        else if (rType == DataControlRowType.DataRow)
        {
            if (controlName != null)
            {
                foreach (string key in controlName.Keys)
                {
                    switch (controlName[key])
                    {
                        case "checkbox":
                            CheckBox cb = new CheckBox();
                            cb.ID = key;
                            container.Controls.Add(cb);
                            break;
                        case "imgbutton":
                            ImageButton ib = new ImageButton();
                            ib.ID = key;
                            ib.Width = 20;
                            ib.Height = 20;
                            ib.EnableViewState = true;
                            if (controlImgUrl != null)
                            {
                                ib.ImageUrl = controlImgUrl[key];//给图片按钮添加图片
                            }
                            if (controlEvent != null)
                            {
                                ib.Command += controlEvent[key];//添加点击事件
                            }
                            container.Controls.Add(ib);
                            break;
                    }
                }
            }
        }
    }

#endregion
}

利用自己重写的类添加模板列

TemplateField tfbutton = new TemplateField();
                Dictionary<string, string> dcbutton = new Dictionary<string, string>();//图片按钮数据集
                dcbutton.Add("btnEdit", "imgbutton");
                Dictionary<string, CommandEventHandler> dcbtnEvent = new Dictionary<string, CommandEventHandler>();//按钮对应的事件集合
                dcbtnEvent.Add("btnEdit", new CommandEventHandler(btnEdit_Click));
                Dictionary<string, string> diImg = new Dictionary<string, string>();//按钮对应的图片集合
                diImg.Add("btnEdit", "~/image/2modify.png");
                tfbutton.ItemTemplate = new GridViewCreate(DataControlRowType.DataRow, dcbutton, dcbtnEvent, diImg);
                tfbutton.HeaderText = "操作";
                gridview.Columns.Add(tfbutton);

有什么不对的地方请多多指教。

gridview动态添加列的问题的更多相关文章

  1. asp.net gridview动态添加列,并获取其数据;

    1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...

  2. GridView动态添加列之后,导致PostBack(回发)页面数据丢失问题解决

    直入主题,首先声明,这个问题是无法解决的,特此在这说明 一.如何动态添加列,如下: 在页面重写OnInit事件,至于为什么要在这个事件写,根据页面的声明周期和经验可知(不用去别的地方找了,这个我找了之 ...

  3. GridView动态添加列并判断绑定数据DataTable的列类型控制展示内容

    此篇随笔是2013年根据项目需求开发记录的,不一定符合大众口味,只需了解开发思路,毕竟解决方案多种多样. 下面简单说说需求点吧: (1)通过下拉列表可以选择一个DataSet(数据集),一个DataS ...

  4. [转]RDLC报表——动态添加列

    本文转自:http://www.cnblogs.com/pszw/archive/2012/07/19/2599937.html 前言 最近接到一个需求:在给定的数据源中,某(些)列,可能需要单独统计 ...

  5. GridView 动态添加绑定列和模板列

    动态添加绑定列很简单:例如: GridView1.DataSourceID = "SqlDataSource1"; BoundField bf1 = new BoundField( ...

  6. DataGridview动态添加列

    1.获取数据源(select * from table名称) 2.动态绑定数据源 private void GetTableInfo(DataTable dt) { listBh = new List ...

  7. WPF GridView动态添加项并读取数据

    假设数据库有如下表, 首先我们创建一个WPF工程,界面如下 <Window x:Class="WpfApplication2.MainWindow" xmlns=" ...

  8. Wpf DataGrid动态添加列,行数据(二)

    这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...

  9. extjs动态添加列

    可以根据日期,动态的插入一列 controller层: StdDayWordQuery:function(btn,event){ var form=Ext.getCmp('queryFormSDW') ...

随机推荐

  1. 为什么Android AsyncTask的使用要遵循五大原则

    引言 AsyncTask是一个围绕Handler和Thread而设计的助手类,封装了在工作线程中与UI交互的细节,只需要对应重写几个回调方法即可,并使得代码更加简洁,优雅.但要注意的是AsyncTas ...

  2. 我学C的那些年[ch01]:浅淡C语言的编译过程

    前几天大致学习了C语言的编译过程,那么今天就和大家分享一下 首先,编译C语言,需要一个文本编辑器(windows自带的也行),和一个MinGW编译器(需要配置环境),就可以将.c文件编译成.exe文件 ...

  3. HDU 1207

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1207 四柱汉诺塔问题 当 r = (sqrt(8*n+1)-1)/2 时, 存在 count = (n ...

  4. 工作总结:MFC自写排序算法(升序)

    最近一个需求里面需要实IP升序排序,用了qsort,结果是内部排序,甚至感觉排序结果不可预测性,于是自己写了一个外部排序. 需求如下:一个指针里面有N条记录,每条记录包含:IP,偏移地址,保留位,均占 ...

  5. jquery的几个小例子

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  6. A Statistical View of Deep Learning (III): Memory and Kernels

    A Statistical View of Deep Learning (III): Memory and Kernels Memory, the ways in which we remember ...

  7. KVM如何以HADOOP作共享存储?

    看到西部数码的作法. 回想IBM的SMARTCLOUD作法,这主要就是应用了HDFS? 外加上HBASE和ZOOKEEPER保驾的? 然后,再想到,这HDFS和OPENSTATCK的SWIFT...纠 ...

  8. Maven实战六

    转载:http://www.iteye.com/topic/1132509 一.简介 settings.xml对于maven来说相当于全局性的配置,用于所有的项目,当Maven运行过程中的各种配置,例 ...

  9. WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞

    漏洞名称: WordPress BuddyPress Extended Friendship Request插件跨站脚本漏洞 CNNVD编号: CNNVD-201307-609 发布时间: 2013- ...

  10. Android RSA加密对象数据

    前几天说了手头项目用MD5和双向加密DES来进行加密的,因为产品是在不断的改造中完善的.考虑到DES和MD5加解密还是会存下一定的风险,于是产品一拍,不行,听你们说MD5加密是不安全的,咱们产品以后做 ...