在asp.net webfrom 中完成用户自定义导出
asp.net原生控件实现自定义列导出功能
自定义列实现
最近负责开发公司内部使用的人事信息化系统时,有一个需求是这样的,需要在页面中可以用户每次导出Excel时自定义需要导出哪些列,经过半天的琢磨和倒腾,总算完成了这个需求。写篇blog记录一下小菜鸡的成长历程。哈哈哈。
需求见截图所示:
tbg:数据源使用DataTable、且GridView中用于绑定数据的BoundFiled列中使用的DataField全部是与CheckBox中的ID一一对应,这样方便后面循环这些控件时进行操作。
尝试一
- 数据源使用的是DataTable一开始想的是根据CheckBox的选中决定删除Remove掉DataTable中的列,因为每次查询时,DataTable中的数据会重新被填充,但在实施过程中发现,如果DataTable中的对应列移除掉,但是GridView中的列乜有移除的话,也会报错,想过也去移除对应的GridView中的BoundFiled,但是在移除后又去添加与CheckBox的ID相对应的列,如此操作非常容易出错,而且整个for循环写的非常恶心,一层套一层。而且在移除对应的DataTable列和GridView中的列之后会无法再进行有效的添加(前端不显示),猜测可能是回发问题导致的,没有有效解决遂放弃。
尝试二
- 使用一个字典Dictionary存储CheckBox的ID和对应的选中状态,然后去遍历GridView中的每一列,为每一列设置对应的隐藏和显示状态。这个方案尝试成功了哈,哈哈哈,虽然很简单,但开心了好一阵子。下面放代码;
DataTable dt = employeesServices.GetEmployeesDataTable();
Dictionary<string, bool> ckbInfoList = new Dictionary<string, bool>();
foreach (var control in Page.Controls)
{
if (control.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlForm")
{
HtmlForm form = (HtmlForm)control;
foreach (var item in form.Controls)
{
if (item is CheckBox)
{
CheckBox ckb = (CheckBox)item;
if (!ckb.Checked)
{
ckbInfoList.Add(ckb.ID, false);
}
else
{
ckbInfoList.Add(ckb.ID,true);
}
}
}
}
}
//遍历GridView列,根据Dictionary提供的内容来决定是否隐藏。
foreach (var control in Page.Controls)
{
if (control.GetType().ToString() == "System.Web.UI.HtmlControls.HtmlForm")
{
HtmlForm form = (HtmlForm)control;
foreach (var item in form.Controls)
{
if (item.GetType().ToString() == "System.Web.UI.WebControls.GridView")
{
GridView gridView = (GridView)item;
foreach (BoundField col in gridView.Columns)
{
foreach (var keyValue in ckbInfoList)
{
if (keyValue.Key == col.DataField)
{
col.Visible = Convert.ToBoolean(keyValue.Value);
}
}
}
}
}
}
}
gv.DataSource = dt;
gv.DataBind();
在asp.net webfrom 中完成用户自定义导出的更多相关文章
- ASP.Net MVC中数据库数据导出Excel,供HTTP下载(转)
转自http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于web ...
- ASP.Net MVC中数据库数据导出Excel,供HTTP下载
本文来自:http://www.cnblogs.com/hipo/archive/2012/03/13/2394019.html 一.关于下载 一般对下载权限有没有限制,或安全性要求不高的情况下,基于 ...
- Asp.net网页中DataGridView数据导出到Excel
经过上网找资料,终于找到一种可以直接将GridView中数据导出到Excel文件的方法,归纳方法如下: 1. 注:其中的字符集格式若改为“GB2312”,导出的部分数据可能为乱码: 导出之前需要关闭分 ...
- asp.net mvc 中使用NPOI导出excel
版本信息:NPOI1.2.5(2.0以上的版本很多方法不清楚) 明确三点: path: mvc 部署网站的时候,我们肯定要拷贝的一个文件夹就mvc的UI层,有点可以肯定的是,你部署网站的路径不一定都是 ...
- 在ASP.NET Core中使用EPPlus导入出Excel文件
这篇文章说明了如何使用EPPlus在ASP.NET Core中导入和导出.xls/.xlsx文件(Excel).在考虑使用.NET处理excel时,我们总是寻找第三方库或组件.使用Open Offic ...
- 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...
- 在Asp.Net MVC中使用NPOI插件实现对Excel的操作(导入,导出,合并单元格,设置样式,输入公式)
前言 NPOI 是 POI 项目的.NET版本,它不使用 Office COM 组件,不需要安装 Microsoft Office,目前支持 Office 2003 和 2007 版本. 1.整个Ex ...
- 2.ASP.NET MVC 中使用Crystal Report水晶报表
上一篇,介绍了怎么导出Excel文件,这篇文章介绍在ASP.NET MVC中使用水晶报表. 项目源码下载:https://github.com/caofangsheng93/CrystalReport ...
- ASP.NET WebForm中异步请求防止XSRF攻击的方法
在ASP.NET MVC中微软已经提供了如何防止跨域攻击的方法.对于传统Webfrom中使用Handler来接受ajax的Post请求数据,如何来防止XSRF攻击呢.这里给大家提供一个简单地方法,和M ...
随机推荐
- HBuilderX无法启动微信小程序?仅三步
1.复制微信开发者工具启动路径 : "C:\Program Files (x86)\Tencent\微信web开发者工具\微信web开发者工具.exe" 不要后面的 "微 ...
- LuoguP4263 [Code+#3]投票统计 题解
Content 有 \(t\) 组询问,每组询问给定一个长度为 \(n\) 的数列,请将出现次数最多的数按照从小到大的顺序输出,或者这些数在数列中出现的次数都相等. 数据范围:\(t\) 未知,\(n ...
- HTML body体
p br h div span <!DOCTYPE html> <html lang="en"> <head> <meta charset ...
- Learning to Sample
此处主要提出几个疑问和想法: 疑问: 为什么需要这个匹配过程?虽然G可能不是P的子集,但是为什么一定需要他是子集呢? 如果一定要匹配的话,匹配过程是没法反向传播的,所以只可以在推理阶段使用,那么这个推 ...
- Linux使用docker安装zimg图片服务器
官方地址:http://zimg.buaa.us/ 配置文件 zimg.lua --zimg server config --server config --是否后台运行 is_daemon = 1 ...
- Linux使用docker安装MinIO
官方地址:http://docs.minio.org.cn/docs/master/minio-docker-quickstart-guide 拉取镜像 docker pull minio/minio ...
- 【LeetCode】323. Number of Connected Components in an Undirected Graph 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 并查集 日期 题目地址:https://leetcod ...
- 【LeetCode】663. Equal Tree Partition 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...
- 【LeetCode】145. Binary Tree Postorder Traversal 解题报告 (C++&Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址:https://leetc ...
- 【九度OJ】题目1196:成绩排序 解题报告
[九度OJ]题目1196:成绩排序 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1196 题目描述: 用一维数组存储学号和成绩,然后 ...
