实现方式:

首先根据输入的sql语句获得相关的列名称返回给前台,然后在datagrid中动态加载列,接着根据查询条件(包括sql语句)获取相关的记录返回给前台用于填充datagrid。从而实现类似oracle web版的sql查询。

前台主要js为:

  1. function sqlSearch(){
  2. var sqlStatement = $.trim($("#sqlStatementId").val());
  3. if(sqlStatement == null || sqlStatement == ""){
  4. return false;
  5. }
  6. var type = "POST";
  7. var url = "sqlExecCtrl.action?cmd=getColumnNameList";
  8. var param = "sqlStatement=" + $("#sqlStatementId").val();
  9. ajaxExtend(type,url,param,function(data){
  10. var options = $("#sqlResultDisplay").datagrid("options");                   //取出当前datagrid的配置
  11. options.columns = eval(data.columns);                                               //添加服务器端返回的columns配置信息
  12. options.queryParams = getQueryParams("sqlConditionId");             //添加查询参数
  13. $("#sqlResultDisplay").datagrid(options) ;
  14. $("#sqlResultDisplay").datagrid("load") ;                                           //获取当前页信息
  15. });
  16. }
  17. /**
  18. * 根据指定条件请求系统资源
  19. *1、 异步
  20. *2、返回格式为json
  21. *
  22. * @param type          //请求方式
  23. * @param url               //请求url
  24. * @param param     //请求参数
  25. * @param callback      //回调函数
  26. */
  27. function ajaxExtend(type,url,param,callback){
  28. ajaxExtendBase(type,url,param,true,callback);
  29. }
  30. /**
  31. * ajax请求基础方法
  32. * @param type
  33. * @param url
  34. * @param param
  35. * @param async
  36. * @param callback
  37. */
  38. function ajaxExtendBase(type,url,param,async,callback){
  39. $.ajax({
  40. type: type,
  41. url: url,
  42. data:param,
  43. async : async,
  44. dataType:"json",
  45. success:function(result){
  46. if(result.success){                                          //只有sql正确能获取相关列名后才再请求列表资源
  47. callback(result.data);                                  //获取当前页信息
  48. }
  49. else{
  50. dealWithException(result.exception);
  51. }
  52. }
  53. });
  54. }
  55. /**
  56. * 将指定form参数转换为json对象
  57. */
  58. function getQueryParams(conditionFormId){
  59. var searchCondition = getJqueryObjById(conditionFormId).serialize();
  60. var obj = {};
  61. var pairs = searchCondition.split('&');
  62. var name,value;
  63. $.each(pairs, function(i,pair) {
  64. pair = pair.split('=');
  65. name = decodeURIComponent(pair[0]);
  66. value = decodeURIComponent(pair[1]);
  67. obj[name] =  !obj[name] ? value :[].concat(obj[name]).concat(value);              //若有多个同名称的参数,则拼接
  68. });
  69. return obj;
  70. }

后台返回的json格式如下

  1. {"total":3,
  2. "columns":[[{"field":"ROLE_ID","title":"ROLE_ID","width":100,"resizable":true},
  3. {"field":"NAME","title":"NAME","width":100,"resizable":true},
  4. {"field":"CREATE_DATE","title":"CREATE_DATE","width":100,"resizable":true},
  5. {"field":"DESCRIPTION","title":"DESCRIPTION","width":100,"resizable":true}]],
  6. "rows":[{"NAME":"普通人员","DESCRIPTION":"只具有查看权限","CREATE_DATE":"2012-09-21 16:31:53.0","ROLE_ID":"7"},
  7. {"NAME":"调度人员","DESCRIPTION":"开放全部功能,但无系统管理相关权限","CREATE_DATE":"2012-09-21 16:32:24.0","ROLE_ID":"8"},
  8. {"NAME":"超级管理员","DESCRIPTION":"具有所有权限","CREATE_DATE":"2012-09-17 20:23:19.0","ROLE_ID":"1"}]}

其中,"columns"对应sqlSearch方法的ajaxExtend(type,url,param,function(data){})回调函数中的data,"total"和"rows"为datagrid加载数据

jquery easyui datagrid 动态 加载列的更多相关文章

  1. EasyUI datagrid动态加载json数据

    最近做一个项目,要求是两张张表可能查找出10多种不同的结果集. 如果想只用一个表格就把全部的结果不同的显示出来那么就肯定不同使用固定的字段名字,要通过动态加载后台返回来的数据把它显示出来就必须动态加载 ...

  2. jquery easyui datagrid 远程加载数据----javascript法

    jquery easyui有三种办法生成datagrid(数据网格),本篇专门讨论javascript借助jquey easy ui实现的方式 html部分 <main role="m ...

  3. easyui datagrid 动态加载数据 渲染问题,表格错位问题

    $('#dg').datagrid({ url:'datagrid_data.json', columns:[[ {field:'code',title:'Code',width:100}, {fie ...

  4. 【第一篇】说说MVC+EF easyui dataGrid 动态加载分页表格

    首先上javascript的代码 <script type="text/javascript"> $(function () { LoadGrid(); }) //加载 ...

  5. 转 -- MVC+EF easyui dataGrid 动态加载分页表格

    首先上javascript的代码 <script type="text/javascript"> $(function () { LoadGrid(); }) //加载 ...

  6. jquery easyui datagrid 远程加载数据----把主键渲染为值遇到的问题及解决方案

    起因:数据库中一些字段存的是代表具体值的数字,需要渲染为具体值 monggodb中的字典 mysql中存放的值为:expertin代表教练擅长的搏击技能 jquery easyui中的相关代码如下:用 ...

  7. EasyUI datagrid 动态加载表头和数据

    首先返回到页面的需要是JSON数据: 第一步: 遍历表头,插入到array中 for (var i = 0; i < jsonObj.title.length; i++) { //把返回的数据封 ...

  8. jquery easyui tree动态加载子节点

    1.前端tree绑定时,使用onBeforeExpand事件:当节点展开时触发加载子节点,自动会向服务端发送请求:url为绑定url,参数为当前节点id this.tree = { method: ' ...

  9. jquery easyui DataGrid 动态的改变列显示的顺序

    $.extend($.fn.datagrid.methods,{ columnMoving: function(jq){ return jq.each(function(){ var target = ...

随机推荐

  1. python AES双向对称加密解密

    高级加密标准(Advanced Encryption Standard,AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分 ...

  2. Linux安装Qt详细步骤 亲测总结

    下载 qt-everywhere-opensource-src-4.8.4.tar.gz================准备工作====================yum install kern ...

  3. Javascript玩转继承(一)

    Javascript究竟是一门面向对象的语言,还是一门支持对象的语言,我想每个人都有着自己的看法.那些Javascript忠实的Fans一定讲Javascript是一门面向对象的语言,像<Jav ...

  4. [na]mail收发过程

    以前老记不住这smtp和pop3谁收谁发. 简单邮件传输协议(SMTP),用来发送或中转发出的电子邮件,       占用tcp 25端口. 第三版邮局协议(POP3),用于将服务器上把邮件存储到本地 ...

  5. hdu 5289 Assignment(给一个数组,求有多少个区间,满足区间内的最大值和最小值之差小于k)

    1.区间是一段的,不是断开的哟 2.代码是看着标程写的 3.枚举左端点,二分右端点流程: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L ...

  6. python 使用py2exe将python 脚本生成exe可执行文件

    使用python的py2exe模块可以很容易地帮助我们将python脚本生成可执行的exe程序.这样我们就可以让脚本脱离虚拟机的束缚,从而独立运行. 首先安装py2exe分解步骤如下:(pip和eas ...

  7. iOS-ARC_Xcode检测循环引用

    iOS-ARC_Xcode检测循环引用 一,在桌面上新建立一个工程,在ViewController.m中输入如下代码: - (void)viewDidLoad { [super viewDidLoad ...

  8. 九、Null在Java中的精确表示

    让我们从下面的语句开始: String x = null; 1.           这个语句具体的做了什么? 回一下什么是变量和什么是值.通常的比喻是变量类似于一个盒子. 就像你可以用盒子来存储东西 ...

  9. shell学习笔记之变量(一)

    一.普通变量 1.使用变量之前通常并不需要事先声明,通常赋值的时候创建他们2.默认所有的变量都被看做字符串,并且以字符串存储3.变量区分大小写4.变量名前面添加$符号来访问变量,赋值的时候只需要使用变 ...

  10. maven引入ojdbc

    http://blog.csdn.net/linminqin/article/details/17922413 ******************************************** ...