gridview动态添加列的问题
相信大家也和我一样遇到过这种问题,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动态添加列的问题的更多相关文章
- asp.net gridview动态添加列,并获取其数据;
1,绑定数据前先动态添加列,见方法CreateGridColumn(只在第一次加载动态添加): 2,gvlist_RowDataBound为对应列添加控件: 前台代码: <%@ Page Lan ...
- GridView动态添加列之后,导致PostBack(回发)页面数据丢失问题解决
直入主题,首先声明,这个问题是无法解决的,特此在这说明 一.如何动态添加列,如下: 在页面重写OnInit事件,至于为什么要在这个事件写,根据页面的声明周期和经验可知(不用去别的地方找了,这个我找了之 ...
- GridView动态添加列并判断绑定数据DataTable的列类型控制展示内容
此篇随笔是2013年根据项目需求开发记录的,不一定符合大众口味,只需了解开发思路,毕竟解决方案多种多样. 下面简单说说需求点吧: (1)通过下拉列表可以选择一个DataSet(数据集),一个DataS ...
- [转]RDLC报表——动态添加列
本文转自:http://www.cnblogs.com/pszw/archive/2012/07/19/2599937.html 前言 最近接到一个需求:在给定的数据源中,某(些)列,可能需要单独统计 ...
- GridView 动态添加绑定列和模板列
动态添加绑定列很简单:例如: GridView1.DataSourceID = "SqlDataSource1"; BoundField bf1 = new BoundField( ...
- DataGridview动态添加列
1.获取数据源(select * from table名称) 2.动态绑定数据源 private void GetTableInfo(DataTable dt) { listBh = new List ...
- WPF GridView动态添加项并读取数据
假设数据库有如下表, 首先我们创建一个WPF工程,界面如下 <Window x:Class="WpfApplication2.MainWindow" xmlns=" ...
- Wpf DataGrid动态添加列,行数据(二)
这是第二中方法,可直接绑定,我这里只是做出了一种思路,并不是最完美. 这里注意一下,因为我里面引用了MVVMLight,所以可能代码不是复制过去就能用了的. 样式也是,所以复制过去看不是我贴出来的界面 ...
- extjs动态添加列
可以根据日期,动态的插入一列 controller层: StdDayWordQuery:function(btn,event){ var form=Ext.getCmp('queryFormSDW') ...
随机推荐
- 七天学会SALTSTACK自动化运维 (3)
七天学会SALTSTACK自动化运维 (3) 导读 SLS TOP.SLS MINION选择器 SLS文件的编译 总结 参考链接 导读 SLS SLS (aka SaLt State file) 是 ...
- 在uboot上创建菜单
一.原理 菜单其实就是一个uboot中的命令,和其他的命令没有什么差别. uboot启动时,如果进入uboot命令模式,先运行这个命令,就会打印出一个菜单界面. 在uboot的命令模式,通过键入“m ...
- NandFlash
一.概述 1.NandFlash NAND结构能提供极高的单元密度,可以达到高存储密度,比如能达到256M,并且写入和擦除的速度也很快.应用NAND的困难在于flash的管理需要特殊的系统接口. 2. ...
- BZOJ 1006 神奇的国度
Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系 ...
- java打jar包 命令行cmd在当前路径打jar包
不尝试就永远不会知道真相. 今天搞webservice,需要将服务单独拉出来发布.打jar包的时候要打成aar包,所以用到cmd下的打jar包的命令. 当前路径打jar包,一定要先进到这个文件夹,然后 ...
- ParentWindow属性及其一系列函数的作用——适合于那些不需要父控件管理内存释放的子控件
TWinControl = class(TControl) property ParentWindow: HWnd read FParentWindow write SetParentWindow; ...
- Maven实战六
转载:http://www.iteye.com/topic/1132509 一.简介 settings.xml对于maven来说相当于全局性的配置,用于所有的项目,当Maven运行过程中的各种配置,例 ...
- 对于唯一索引使用唯一条件搜索, InnoDB 只锁定找到的index record,不是它之前的区间
| test100 | CREATE TABLE `test100` ( `sn` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增编号', `phoneNo` ...
- [Poetize I]黑魔法师之门
描述 Description applepi被囚禁的地点只有一扇门,当地 人称它为“黑魔法师之门”.这扇门上画着一张无向无权图,而打开这扇门的密码就是图中[每个点的度数大于零且都是偶数]的子图的个数对 ...
- 关于SVN的操作批处理示例
关于SVN的操作批处理示例 为了一句话:不要动手做机器能够做的事情. 天天工作用svn,更新啥的打开目录啥的动作天天在重复.每次写些命令也蛮无聊的,不说了,看下面: 1 @echo off 2 rem ...