基于我上一篇文章<a href="http://www.cnblogs.com/alasai/p/4765756.html">asp.net mvc excel导入</a>中不同的部门上传不同的excel文件类型,当在同一个页面查询时怎么办呢。

解决方案:根据传过来的表名和时间参数一次性把数据全部加载到table中,其中表头要我们一个个去定,主体的顺序我们也要和表头一样,加载到前台再用表格分页控件来分页,我这里大概有100多个excel文件类型,他们的列名都不要,想想这样的做法不且实际。

有没有其他的解决方案呢,看了很多的jqgrid示例,他们的表头(colNames)和内容(colModel)都是首先定死的。这里我想到一个解决方案就是把colNames和colModel都做成活的,这样不就可以完美解决上面的问题了吗,

想法总是好的,但做起来不是一帆风顺的,但前提是你得有这种想法才行。

想法和思路:

1.把jqgrid的colNames和colModel都做成活的,但是每个表的colNames都不一样,而且他们的顺序必须一致才行,怎么办呢,在<a href="http://www.cnblogs.com/alasai/p/4765756.html">asp.net mvc excel导入</a>这篇文章中我上传文件成功之后会把他们的colNames和colModel都保存在以他们表名命名的txt文件中。代码片段如下

所以展示每个表的colNames和colModel就不成问题

后台c#代码如下:

 [HttpPost]public ActionResult GetTestData(string department, string tablename, string StartTime, string EndTime){Stopwatch watch = CommonHelper.TimerStart();string sql5 = "SELECT * FROM " + department + "_" + tablename + " where 1=1 and enabled='1' ";if (!string.IsNullOrEmpty(StartTime)){sql5 += " and convert(varchar(10),addtime,120)>='" + StartTime + "' ";}if (!string.IsNullOrEmpty(EndTime)){sql5 += " and convert(varchar(10),addtime,120)<='" + EndTime + "' ";}DataTable ListData = DataFactory.Database().FindTableBySql(sql5);this.dirCSV = Server.MapPath("~/Content/uploads/");StreamReader sr = new StreamReader(this.dirCSV + "\\" + department + "_" + tablename + ".txt");String line;List<string> list = new List<string>();while ((line = sr.ReadLine()) != null){list.Add(line.ToString());}string colnames = "";string[] chinesname = list[0].ToString().Trim(',').Split(',');string[] englishname = list[1].ToString().Trim(',').Split(',');for (int i = 0; i < chinesname.Length; i++){colnames += "'" + chinesname[i].ToString() + "',";}List<Department> list1 = new List<Department>();for (int j = 0; j < englishname.Length; j++){list1.Add(new Department { index = englishname[j].ToString().ToLower(), lable = chinesname[j].ToString(), name = englishname[j].ToString().ToLower(), sortable = "false" });}var result = new{Json = new{colNames = chinesname,colModels = (from dept in list1select new{index = dept.index,lable = dept.lable,name = dept.name,sortable = false}),data = new{options = new{page = "1",total = "1",records = "1",costtime = CommonHelper.TimerEnd(watch),rows = ListData}}}};return Content(result.ToJson());}

那么前台改如何解析上面生成的json呢。

jquery代码如下

 $.ajax({url: "@Url.Content("/DataSwitch/GetTestData")?department=" + $("#seldepartment").val() + "&tablename=" + $("#ExcelFileId").val() + "&sjs=" + new Date().getTime() + "&StartTime=" + $("#StartTime").val() + "&EndTime=" + $("#EndTime").val(),type: 'POST',cache: false,data: {},success: function (result) {result = eval('('+result+')');var colModels = result.Json.colModels;var colNames = result.Json.colNames;var data = result.Json.data.options;$("#gridTable").jqGrid({datatype: 'jsonstring',datastr: data,colNames: colNames,colModel: colModels,jsonReader: {root: 'rows',repeatitems: false},gridview: true,pager: $('#gridPager'),height: $(window).height() - 111,autowidth: true,rowNum: 15,rowList: [15, 30, 50, 100],viewrecords: true,rownumbers: true,shrinkToFit: false})},error: function (result) {}}); //end ajax

现在查询不同的表可以显示在jqgrid中显示不同的表内容了,但是这里又出现了一个问题(这个问题你是在百度上很难找得到解决方案的)

问题就是只能显示第一次选择的表内容,而且分页也没有效果,这个问题困扰了我三个小时,最后在jqgrid群里问了一下,有人说是加载之后,加载数据的html没有了。这时我就试试了再加载不同表格之前我重新构造一下html。

  $grid = $("<table id='gridTable'></table><div id='gridPager'></div>");$('#grid_List').empty().html($grid);

这时这段简短而神奇的代码解决了上面遇到的问题。

完整的jquery代码如下

 //加载表格function GetGrid() {var eid = $("#ExcelFileId").val();if (eid == ""){tipDialog("请先选择文件类型", 3,0);return false;}$grid = $("<table id='gridTable'></table><div id='gridPager'></div>");$('#grid_List').empty().html($grid);$.ajax({url: "@Url.Content("/DataSwitch/GetTestData")?department=" + $("#seldepartment").val() + "&tablename=" + $("#ExcelFileId").val() + "&sjs=" + new Date().getTime() + "&StartTime=" + $("#StartTime").val() + "&EndTime=" + $("#EndTime").val(),type: 'POST',cache: false,data: {},success: function (result) {result = eval('('+result+')');var colModels = result.Json.colModels;var colNames = result.Json.colNames;var data = result.Json.data.options;$("#gridTable").jqGrid({datatype: 'jsonstring',datastr: data,colNames: colNames,colModel: colModels,jsonReader: {root: 'rows',repeatitems: false},gridview: true,pager: $('#gridPager'),height: $(window).height() - 111,autowidth: true,rowNum: 15,rowList: [15, 30, 50, 100],viewrecords: true,rownumbers: true,shrinkToFit: false})},error: function (result) {}}); //end ajax}

至此问题就被完美的解决了。

转载于:https://www.cnblogs.com/alasai/p/4765945.html

asp.net mvc jqgrid 同一个页面查询不同的表,jqgrid显示不同表的表头和数据并且分页...相关推荐

  1. 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理

    系列文章 七天学会ASP.NET MVC (一)--深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)--ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)- ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)...

    ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) 原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过 ...

  3. Asp.net MVC Filter监控页面性能和运行时间

    本篇文章作用说明: Asp.net MVC Filter监控View实例,监控每个View页面加载的时间,跟踪分析每个页面的加载性能,然后做进一步优化: 问题背景 最近,客户一直反馈系统使用慢,有时候 ...

  4. php显示页面查询次数和耗时,wordpress显示页面查询次数、页面执行时间

    前言:不为别的,别人有的,我也要让你们用上 本篇提供两种实现方式:短代码和PHP代码输出 一.短代码 PS:这种方法可以让你在文本框不能输出PHP代码的情况下输出页面查询次数和页面执行时间. //输出 ...

  5. jsf如何通过按钮切换在同一个页面上的非公共部分显示不同的内容

    2019独角兽企业重金招聘Python工程师标准>>> 在jsf中,同一个页面上有公有的内容,也有非公有的内容,通过一个按钮进行切换来显示不同的内容(通过ajax实现):    前台 ...

  6. asp.net怎么实现按条件查询_Display Posts : 按条件显示WordPress文章的最强插件

    转自丘壑博客 WordPress本质上是一个内容管理系统(CMS),是显示.创建.发布和维护内容的软件. 本文介绍的插件 Display Posts 主要就是用来扩展WordPress关于显示内容这部 ...

  7. asp.net mvc 上传到服务器 图片不显示,ASP.NET MVC实现图片上传、图片预览显示

    先看看效果(下面gif动画制作有点大,5.71MB): 题外话:上面选择图片来源于Insus.NET的新浪微博,言归正传,由于以前的asp.net mvc的练习文件上传文件,显示或是下载等博文,均是存 ...

  8. Asp.Net MVC +EF(2)Linq查询和Lambda表达式

    Linq简介 Linq全称Language Integrated Query(语言集成查询),为我们提供一种统一的方式来查询和操作各种数据. linq to object:是针对实现IEnumerab ...

  9. asp.net怎么实现按条件查询_用这个提取函数王中王,制作数据查询表

    当Excel表的数据太多时,需要进行数据的查询与提取,往往要使用查找与引用函数.提取条件简单还好说,一复杂起来,就要使用又长又头疼的嵌套函数,不要说用了,光看懂函数都要死一片脑细胞. 别伤脑筋了,为什 ...

最新文章

  1. 最大子段和(动态规划及分治法)
  2. java 文本工具类_干货:排名前16的Java工具类
  3. Python生成列表的所有子集
  4. 城市轨道交通运营票务管理论文_解读新版《天津市轨道交通票务管理定》
  5. 软件过程改进之百科名片
  6. 关于 QImage::Format_Mono
  7. python培训班靠谱吗-python培训机构靠谱吗?python培训班
  8. 进程控制(PCB,进程ID,进程状态,fork函数,文件共享)
  9. 什么是java中的监听器_java中什么是监听器
  10. 修改注册表解决 Win7 DbgView 不显示调试信息
  11. OpenCV下载驿站(解决github下载问题,解决OpenCV官网下载较慢)
  12. 如何拆分PDF成单页?这三个方法分享给你
  13. 推荐10款效率可以翻倍的IDEA插件,撸码利器
  14. 云通讯这局棋,声网、容联云怎么破?
  15. 两台同一局域网下的电脑实现共享文件夹
  16. 阿里云虚拟主机wordpress伪静态设置Nginx设置
  17. Java之throw和throws的区别
  18. 小马哥----4G定制版i6(仿苹果6 6571芯片) 拆机外观与与开机界面图
  19. 通过canvas给图片添加水印
  20. 走进掌榕:正和岛青年徽商正和塾小组2021年首聚

热门文章

  1. 智能合约语言Solidity 类型介绍
  2. 初创企业购买企业邮箱_支持#NetNeutrality =支持设计师及其创建的初创企业
  3. 数据结构显示树的所有结点_您需要了解的有关树数据结构的所有信息
  4. 大学毕业没有实习经历_我是如何在大学毕业后没有实习的情况下获得第一份开发人员工作的...
  5. (C++)判断一个序列是non-increasing/non-decreasing还是两者都不的两个方法
  6. Java零基础学习难吗
  7. Java Web学习总结(17)——JSP属性范围
  8. vue下的bootstrap table + jquery treegrid, treegrid无法渲染的问题
  9. 好程序员分享24个canvas基础知识小结
  10. linux基础知识-链接列表