,,GridView选择性导出Excel解决方案

,,GridView选择性导出Excel解决方案 本文主要介绍GridView选择性导出Excel的解决方案,有需要的朋友可以参考一下。 一、需求分析可以根据用户需求有选择的导出。以前出口的都做过,但是这个新的需求又来了。但是仔细想想,导出几万条数据是对的,意义不大,但是有选择地导出用户需要的数据才是用户需要的。哪里有需要,哪里就有解决办法。任何问题都有不止一个解决方案,GridView的选择性导出也是如此。首先,GridView绑定数据库的表数据。如果选择导出,我们也可以从数据中查询所需数据,直接从前台的GridView表中获取数据。问题来了,怎么判断选中信息(或者整个信息)的主键是否选中?哪个效率更高? 第二,解决方案一 1.前台获取选中行的主键信息,以JSON格式发送给后台。后台解析后,从数据库中获取数据,通过DataTable导出到Excel。 .导出所选操作复制代码代码如下:ASP:Button ID=' Export ' runat=' server ' CSS class=' BTN文学' Text='导出所选onclient Click=' return getnumberExport()' OnClick=' Export _ Click '/.前台JS,获取选中行的那条信息的主键,也就是显示数据表格(一种控件)要有一列是主键,获取到所有的主键以JSON格式保存,然后传到服务器复制代码代码如下:脚本类型='text/javascript '函数getnumberExport(){ if(export check()){//通过GridView ID获取元素var gv=文档。getelementbyid(' CTL 00 _ content placeholder 1 _ gridView ');//获取显示数据表格(一种控件)的输入html var my check=gv。getelementsbytagname(“input”);//定义一个新数组var fam=new Array();var hgvar id//循环检测检验盒标签,获取每条数据的主键信息for(var I=0;我的检查长度;i ) { if (mycheck[i].type=='checkbox')//hidden { //如果检验盒被选中if (mycheck[i].checked==true){ var numid=new Object();hg=gv.rows(i 1).细胞(20)。innerHTML//子字符串()方法用于提取字符串中介于两个指定下标之间的字符。LastIndexOf()倒取字符串,从后往前取到指定的字符Hg=Hg。子串(Hg。lastindexof('=')1,hg。lastindexof(“”);//获取一条数据的主键id=gv.rows(i 1).细胞(1)。innerhtmlnumid . number=hgnumid . id=IDF am。push(numid);} } } //$.ajaxSetup({ //async: false //设置为同步请求//});//将数组转换成JSON类型var NID=JSON。stringify(fam);//发布方式,向服务器传送数据$.post('List.aspx ',{ Action: 'action ',numid: nid},function(result){ });}否则{返回false} }/脚本。后台解析JSON,转换成数据表,导出到擅长复制代码代码如下:受保护的void Page_Load(对象发送方,EventArgs e) { //判断服务器是否正确接收数据如果(请求Params['Action']!=null) { //获取前台的JSON字符串numid=请求.Params['numid'].ToString();session[' numid ']=numid;} } ///摘要///选择性导出EXCEL////summary///param name=' sender '/param///param name=' e '/param protected void Export _ Click(object sender,EventArgs e){ FamilyPlanningFacade FamilyPlanningFacade=new FamilyPlanningFacade();//实例化计生外观层数据集dsall family=new DataSet();DataSet dsone family=new DataSet();dsall家庭=计划生育门面.get all list();//获得所有计生信息dsAllFamily .表格[0]。行。clear();//解析JSON需引入纽顿软件100 . Json和纽顿软件100 . Linq库JArray nu midget=(JArray)JSON convert .反序列化对象(会话['numid'].ToString());//遍历JSON中所需要的值,在通过这个值查询数据库获取一条数据,将数据加入新行for(int I=0;我是侏儒。数数;I){作业对象号get=(作业对象)nu midget[I];string num=numberget['number'].ToString();如果(编号.等于(""){ //获取身份证明(识别)的键值string id=numberget['id'].ToString();//enBasic .ID=id//通过身份证明(识别)的值(唯一)查询到一条数据dsExport=famfacade .选择导出(id);//新建行DataRow row=newDataTable .NewRow();//向新建行中添加数据划ItemArray=dsExport .表格[0]。行数[0]。项目数组;//添加此行到数据表中新数据表.行。添加(行);} } DataTable dtfamilyplanning=new DataTable();//创建计生信息数据表dtfamilyplanning=newDataTable .表[0];//设置表字段dtfamilyplanning=dtfamilyplanning .默认视图。ToTable(false,new string[] { 'ID ',' name ',' sex ' });//修改表头信息,为了使导出的擅长表头为汉字dtfamilyplanning .列['ID'].ColumnName='编号;dtfamilyplanning .列['名称']。ColumnName='姓名;dtfamilyplanning .列['性']。ColumnName='性别;//.表中其它信息不再细写//新建DataTableToExcel类的对象DataTableToExcel dtToExcel=new DataTableToExcel();//导出数据到Excel dtToExcel .ToExcel(dtfamilyplanning);} .数据表导出为擅长方法,很不错的方法,站在巨人肩膀上为我所用。 复制代码代码如下:public void to excel(DataTable dt){ DataGrid DG excel=new DataGrid();dgExcel .DataSource=dtdgExcel .DataBind();HttpContext .当前。回应。charset=' GB 2312string fileName=HttpUtility .UrlEncode(Guid .NewGuid().ToString(),系统正文。编码。utf8);string str='附件文件名='文件名。xls ';HttpContext .当前。回应。内容编码=系统.文字。编码。UTF8HttpContext .当前。回应。内容类型='应用程序/ms-excel ';HttpContext .当前。回应。追加头(' content-disposition ',str);string writer SW=new string writer();html text writer htmTextWriter=new html text writer(SW);dgExcel .渲染控件(htmTextWriter);HttpContext .当前。回应。write(' htmlheadmeta http-equiv=' Content-Type ' Content=' text/html;charset=utf-8 '/');string style=' styletd { MSO-数字-格式:' \ \ @ ';}/style ';//防止导出擅长时将以0开头的全数字数据的0去掉HttpContext .当前。响应.写入(风格);HttpContext .当前。回应。写('/头体');HttpContext .当前。回应。WriteHttpContext .当前。回应。write('/body/html ');HttpContext .当前。回应。end();} 最后看一遍这个方法的整个实现过程: 1 通过前台获取每个选中行的主键值, 2 再将所有的键值保存到数组,数组转化成JSON格式, 3 在通过创建交互式、快速动态网页应用的网页开发技术传到后台, 4 后台接收,解析JSON,取得JSON中的值, 5 即可查询数据库获得每条选中的数据,将每行数据添加到数据表中, 6 最后导出为Excel。这个方法存在的问题:一。前台获取显示数据表格(一种控件)选中行的主键值,通过innerHTML获取主键的位置,也就是说如果超文本标记语言中主键位置变动,获取主键代码也要变,这个影响比较大,牵一发而动全身,这样对系统的灵活性很有影响。再看第二个方法: 二 2.后台直接后去前台显示数据表格(一种控件)表的主键集合,获取到后的实现和上一个方法类似。 .导出所选操作复制代码代码如下:ASP:Button ID=' Export ' runat=' server ' CSS class=' BTN文学' Text='导出所选OnClick='Export_Click'/.后台按钮事件复制代码代码如下:protected void Export _ Click(object sender,EventArgs e){ DataSet dsall family=new DataSet();DataSet dsone family=new DataSet();FamilyPlanningFacade FamilyPlanningFacade=new FamilyPlanningFacade();//实例化计生外观dsall家庭=计划生育门面.get all list();//获得所有计生信息dsAllFamily .表格[0]。行。clear();//循环网格视图每行,查找检验盒被选中的行foreach(GridView行ms生长在此。网格视图。行数){//通过身份证明获得所需要遍历的复选框CheckBox chk=(CheckBox)msgRow .FindControl('删除此');//判断检验盒是否被选中如果(瑞士法郎.已检查){ //获取身份证明(识别)的键值字符串id=msgRow .单元格[1]。文字。tostring();dsone家庭=计划生育门面.GetList(id);//新建行DataRow row=dsAllFaamily .表格[0]。NewRow();//向新建行中添加数据划ItemArray=dsOneFamily .表格[0]。行数[0]。项目数组;//添加此行到数据表中dsAllFamily .表格[0]。行。添加(行);} } if (dsAllFamily .表格[0]。行。count==0){个人文件.网络。messageshow。messagebox。显示(这个,’请选择需要导出的信息!');返回;} DataTable dtfamilyplanning=new DataTable();//创建计生信息数据表dtfamilyplanning=dsAllFamily .表[0];//设置表字段dtfamilyplanning=dtfamilyplanning .默认视图。ToTable(false,new string[] { 'ID ',' name ',' sex ' });//修改表头信息,为了使导出的擅长表头为汉字dtfamilyplanning .列['ID'].ColumnName='编号;dtfamilyplanning .列['名称']。ColumnName='姓名;dtfamilyplanning .列['性']。ColumnName='性别;//.表中其它信息不再细写//新建DataTableToExcel类的对象DataTableToExcel dtToExcel=new DataTableToExcel();//导出数据到Excel dtToExcel .ToExcel(dtfamilyplanning);} 这个方法的实现过程很简单,直接在后台获取的是前台显示数据表格(一种控件)显示的主键数据,相比前台传JSON数据相对简单了很多3 .3 3.除了这两种方法,还有一种更快的方法。您可以直接从GridView获取显示的数据,而不是重新查询数据库。不好的是,如果数据被很多人操作,更新频繁,直接从接口GridView获取的数据可能不是最新的数据。复制代码如下:protected void export _ click(object sender,eventargs e){ datatables export=new datatable();//循环获取gridView的每一列,并获取(int I=0;ithis . GridView . columns . count-1;I) {//将表头信息添加到数据表表头ds export . columns . Add(this . GridView . columns[I])中。header text);}//循环gridView的每一行,找到选中复选框的行foreach(gridView row ms grow in this . gridView . rows){//Get需要ID遍历的CheckBox check=(CheckBox)ms grow . findcontrol(' delete this ');//确定复选框是否被选中,如果(chk。选中){ //定义DataTable system . data . datarowdr=ds export . newrow()的新行;for(int I=0;我长大了。细胞计数-1;I) {//获取Cells dr [i]=msgrow.cells [i]的数据。text . tostring();}//向DataTable dsExport添加新行。rows . Add(dr);} else { personal files . web . messageshow . messagebox . show(this,'请选择要导出的信息!');返回;} }//删除不需要的列dsExport。数据表中的columns . Remove(' select ');DsExport。columns . Remove(' detailed ');DsExport。columns . Remove(' edit ');个人档案。BLL。DataTableToExcel dtToExcel=新个人档案。BLL . DataTableToExcel();//将数据导出到excel dt to excel . to excel(ds export);}以上三种方法写的很清楚,各有千秋。根据实际项目的要求进行选择。学习的过程一定是一个需要多接触各种方法的实施的过程。之前写过一篇关于JSON的博客,但是从来没有用过。这次有机会学了一个用法,感觉很爽。反复学,积累,嘿嘿嘿。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: