博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gridview动态添加列的问题
阅读量:5021 次
发布时间:2019-06-12

本文共 2729 字,大约阅读时间需要 9 分钟。

  相信大家也和我一样遇到过这种问题,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);

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

转载于:https://www.cnblogs.com/bboy-coco/p/4096574.html

你可能感兴趣的文章
学习rabbitmq
查看>>
TX-LCN事务控制原理
查看>>
idea如何设置类头注释和方法注释
查看>>
Android 模拟器 获得 root权限
查看>>
5.盒模型
查看>>
drf 生成接口文档
查看>>
51nod 1385凑数字(字符串+构造)
查看>>
FineReport中JS如何自定义按钮导出
查看>>
使用secureCRT上传下载
查看>>
JAVA中对象的克隆及深拷贝和浅拷贝
查看>>
JVM GC算法 CMS 详解(转)
查看>>
每日分享
查看>>
WebService发布到IIS
查看>>
jxls导出表格
查看>>
python PDF报表服务
查看>>
Redis集群单机自嗨版
查看>>
HTML5--》details
查看>>
digital circuit design
查看>>
OC1_协议语句
查看>>
Linux下ffmpeg的各种编解码器的安装
查看>>