有时候需求需要默认加载表格的时候把子表格的数据也显示出来,经过研究相关SubGrids API配置如下:

属性 类型 描述 默认值
subGrid boolean 设置为true启用子表格。如果启用子表格,在父表格的左边会添加附加的列。此列包含一个“加”图片表示用户可以点击它展开行,默认所有行的子表格是收缩的。 false
subGridOptions object 子表格的配置,下面为配置的默认值

-收缩JavaScript代码
{
plusicon : "ui-icon-plus",
minusicon : "ui-icon-minus",
openicon: "ui-icon-carat-1-sw",
expandOnLoad: false,
selectOnExpand : false,
reloadOnExpand : true
}
  • plusicon 和 minusicon :定义展开/收缩子表格的图标。名字需要从设置的主题中选出
  • openicon :行展开时,显示在 minusicon 下的图标
  • expandOnLoad :设置为true,当子表格数据加载完毕后自动展开(when set to true make it so that all rows will be expanded automatically when a new set of data is loaded. )
  • selectOnLoad :设置为true,点击展开图标(plusicon)将会选择父表格中的此行数据
  • reloadOnExpand :设置为false,展开时仅加载一次数据,随后的点击图标点击操作只是显示或者隐藏子表格,而不会再发送ajax重新获取数据
 
subGridModel array 仅当subGrid设置为grud有效,描述子表格数据的列模型(column model),语法

-收缩JavaScript代码
subGridModel : [
{ name : ['name_1','name_2',…,'name_n'],
width : [width_1,width_2,…,width_n] ,
align : ['left','center',…,'right'] ,
params : [param_1,…,param_n],
mapping:['name_1_map','name_2_map',…,'name_n_map']}
  • name:子表格列表头显示的标签内容
  • width:列宽数组,需要和name数组长度一致
  • align: 列对其方式,可以为left,center,right。不设置默认为left
  • params:给subGridUrl配置增加的附加参数(an array in which we can add a name from main grid's colModel to pass as additional parameter to the subGridUrl.)
  • mapping:子表格中的repeatitems设置为false时使用。用于定义子表格数据列名称的映射。不设置此参数,则使用name配置作为映射。
 
subgridtype mixed 设置子表格可以作为服务加载(This option allow loading subgrid as a service.)。没有设置此项,将使用父表格的datatype配置,参考下面的示例 null
subGridWidth integer 设置子表格宽度 20
subGridUrl string 配置子表格数据源url地址。jqGrid添加父行id作为参数添加传递到这个url地址。 如果不需要传递附加参数,要传递附加参数,可以配置subGridModel中的params。 empty string
ajaxSubgridOptions object 设置子表格ajax请求数据时的全局配置。会重写子表格中当前的所有ajax请求配置,包括complete事件。 empty object

      要配置子表格,需要同时配置xmlReader或者jsonReader中的subGrid配置项,xmlReader默认配置如下:

-收缩JavaScript代码
xmlReader : {
...
   subgrid: {
      root: "rows",
      row: "row",
      repeatitems: true,
      cell: "cell"
   }
}
 jsonReader

-收缩JavaScript代码
jsonReader : {
...
   subgrid: {
      root: "rows",
      repeatitems: true,
      cell: "cell"
   }
}

映射规则和父表格一样,更多信息参考:
jqGrid XML数据源读取器选项配置
jqGrid JSON数据源读取器选项配置
jqGrid datatype配置为function
jqGrid自定义数据

  为了将子表格作为服务器,subGridType需要设置正确(In order to use correct subGridType as service ),下面示例展示实现:

jQuery("#grid_id").jqGrid({
...
   subgridtype: function(rowidprm) {
      jQuery.ajax({
         url:'url_to_the_service',
         data:rowidprm,
         dataType:"json",
         complete: function(jsondata,stat){
            if(stat=="success") {
               var thegrid = jQuery("#grid_id")//[0];
               thegrid.subGridJson(eval("("+jsondata.responseText+")"),rowidprm.id);
            }
         }
      });
   },subgrid
...
});

参数 rowidprm 为键值对对象包含被展开行的id,设置subGridModel配置的其他的参数,subGridJson方法将在下面介绍。

事件

事件参数说明

  • pID:放置子表格内容的div元素的唯一id
  • id: 数据行id
  • sPostData:子表格发送请求时提交的数据
Event Parameters Description
subGridBeforeExpand pID, id 展开子表格前触发。需要返回true/false,返回false阻止展开子表格
subGridRowExpanded pID, id 展开子表格后触发,用于想子表格添加自定义的数据
subGridRowColapsed pID, id 收缩子表格后触发,需要返回true/false,返回false不收缩子表格
serializeSubGridData sPostData 序列化传递给ajax请求的数据,需要返回序列化后的数据。当需要向服务器传递自定义数据时使用,如json/xml格式的字符串等。

Methods

方法 参数 返回值 描述
expandSubGridRow rowid jqGrid object 动态展开指定rowid的行的子表格
collapseSubGridRow rowid jqGrid object 动态收缩指定rowid的行的子表格
toggleSubGridRow rowid jqGrid object 动态切换指定rowid的行的子表格的展开/收缩状态
subGridJson json, rowid false 向子表格添加数据,json对对象,rowid为需要添加的数据行id
subGridXml xml, rowid false

向子表格添加数据,xml为xml dom节点,rowid为需要添加的数据行id

显示每行数据中的详细数据,并把子table显示出来

jQuery(document).ready(function(){
  jQuery("#list").jqGrid({
    url:'example.php',
    datatype: 'xml',
    mtype: 'GET',
    colNames:['Inv No','Date', 'Amount','Tax','Total','Notes'],
    colModel :[
      {name:'invid', index:'invid', width:55},
      {name:'invdate', index:'invdate', width:90},
      {name:'amount', index:'amount', width:80, align:'right'},
      {name:'tax', index:'tax', width:80, align:'right'},
      {name:'total', index:'total', width:80, align:'right'},
      {name:'note', index:'note', width:150, sortable:false}
    ],
    pager: '#pager',
    rowNum:10,
    rowList:[10,20,30],
    sortname: 'invid',
    sortorder: 'desc',
    viewrecords: true,
    caption: 'My first grid',
    subGrid: true,
    subGridUrl : "subgrid.php",

subGridOptions: {

plusicon: "ace-icon fa fa-plus center bigger-110 blue",
minusicon: "ace-icon fa fa-minus center bigger-110 blue",
openicon: "ace-icon fa fa-chevron-right center orange",
expandOnLoad: true,
selectOnExpand : false,
reloadOnExpand : false
},

 

onSelectRow: function (rowid, status, e) {
selectOptId = rowid;
console.log('selectOptId--:' + rowid);
//$("#grid-table").expandSubGridRow(rowid); 都可以
$("#grid-table").jqGrid ('expandSubGridRow', rowid);
},

    subGridModel : [
      {
      name  : ['No', 'Item', 'Qty', 'Unit', 'Line Total'],
      width : [55, 200, 80, 80, 80],
      align : ['left','left','right','right','right'],
      params: ['invdate']
      }
    ]
  });
}); 
<?php
// get the id passed automatically to the request
$id = $_GET['id'];
// get the invoice date passed to this request via params array in
//subGridModel. We do not use it here - this is only demostration
$date_inv = $_GET['invdate'];

        suboptions = {
            plusicon : "ui-icon-plus",
            minusicon : "ui-icon-minus",
            openicon: "ui-icon-carat-1-sw",
            expandOnLoad:  false,
            delayOnLoad : 50,
            selectOnExpand : false,
            reloadOnExpand : true
        };

// connect to the database
$db = mysql_connect($dbhost, $dbuser, $dbpassword) or die("Connection Error: " . mysql_error()); 

mysql_select_db($database) or die("Error conecting to db."); 

// construct the query        suboptions = {
            plusicon : "ui-icon-plus",
            minusicon : "ui-icon-minus",
            openicon: "ui-icon-carat-1-sw",
            expandOnLoad:  false,
            delayOnLoad : 50,
            selectOnExpand : false,
            reloadOnExpand : true
        };

$SQL = "SELECT item_num, item, qty, unit FROM invlines WHERE invid=".$id." ORDER BY item";
$result = mysql_query( $SQL ) or die("Couldn?t execute query.".mysql_error()); 

// set the header information
if ( stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml") ) {
            header("Content-type: application/xhtml+xml;charset=utf-8");
} else {
            header("Content-type: text/xml;charset=utf-8");
} 

echo "<?xml version='1.0' encoding='utf-8'?>";
echo "<rows>";
// be sure to put text data in CDATA
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
            echo "<row>";
            echo "<cell>". $row[item_num]."</cell>";
            echo "<cell><![CDATA[". $row[item]."]]></cell>";
            echo "<cell>". $row[qty]."</cell>";
            echo "<cell>". $row[unit]."</cell>";
            echo "<cell>". number_format($row[qty]*$row[unit],2,'.',' ')."</cell>";
            echo "</row>";
}
echo "</rows>";

?>

启用/禁用子表格

子表格可以动态的启用或者禁用。

//禁用子表格:
jQuery("#grid_id").hideCol('subgrid');
//启用子表格:
jQuery("#grid_id").showCol('subgrid');

示例说明

  • grid_id:父表格的id
  • subgrid :固定的参数,不要设置其他内容

要动态设置子表格是否可用,需要配置父表格的subGrid为true,要不上面的代码没有效果

jqGrid subGrid配置 如何首次加载动态展开所有的子表格的更多相关文章

  1. ExpandableListView的首次加载全部展开,并且点击Group不收缩、

    最近在做Android市场的应用.看到好多市场类的QQ应用宝做的算是最完美的了.在项目中要实现它的下载管理的实现,而界面如下: 反编译得到使用的是ExpandableListView.而怎么首次加载全 ...

  2. Httpd服务入门知识-Httpd服务常见配置案例之DSO( Dynamic Shared Object)加载动态模块配置

    Httpd服务入门知识-Httpd服务常见配置案例之DSO( Dynamic Shared Object)加载动态模块配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.加载动 ...

  3. jqGrid首次加载时不加载任何数据

    1. 首次加载时候设置 jqGrid 属性 datatype: 'local' $("#grid").jqGrid({ url:"#", datatype:&q ...

  4. RequireJS首次加载偶尔失败

    现象:第一次加载JS文件,首次加载偶尔失败: 原因:require(['jquery', 'operamasks', 'zTree', 'jQueryCookie'],中前后引用同步加载: 解决方式: ...

  5. NGINX 加载动态模块(NGINX 1.9.11开始增加加载动态模块支持)

    NGINX 1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展.目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块. tinywan@tinyw ...

  6. vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案

    # vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案 最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化 1,关闭打 ...

  7. vue单页应用首次加载太慢之性能优化

    问题描述: 最近开发了一个单页应用,上线后发现页面初始加载要20s才能完成,这就很影响用户体验了,于是分析原因,发现页面加载时有个 vendor.js达到了3000多kb,于是在网上查找了一下原因,是 ...

  8. vue 页面首次加载缓慢原因及解决方案

    第一次打包vue的项目部署到服务器,发现首次加载特别的缓慢要几十秒才加载出来,完全没有在本地开发环境上那么流畅. 主要原因是页面在打包后没有进行相关的配置导致资源文件特别大,一次想要全部加载完成回特别 ...

  9. vue cli3.0 首次加载优化

    项目经理要求做首页加载优化,打包后从十几兆优化到两兆多,记下来怕下次忘记 运行report脚本 可看到都加载了那些内容,在从dist文件中index.html 查看首次加载都加载了那些东西,如下图:然 ...

随机推荐

  1. php 截取中文字符串 - ord()函数 0xa0...

    在ASCII中,0xa0表示汉字的开始 其中php中的一个函数ord()函数 此函数功能返回一个字符的askii码值: 如ord('A')=65; <?php function GBsubstr ...

  2. C# 反射之调用方法谈

    反射的定义 反射提供了描述程序集.模块和类型的对象(Type 类型). 可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性. 如果代码中使用了特性 ...

  3. Yii源码阅读笔记(三十三)

    ServiceLocator,服务定位类,用于yii2中的依赖注入,通过以ID为索引的方式缓存服务或则组件的实例来定位服务或者组件: namespace yii\di; use Yii; use Cl ...

  4. ios中自定义tableView,CollectionView的cell什么时候用nib加载,什么时候用标识重用

    做了一段时间的iOS,在菜鸟的路上还有很长的路要走,把遇到的问题记下来,好记性不如烂笔头. 在项目开发中大家经常会用到tableView和collectionView两个控件,然而在cell的自定义上 ...

  5. Thinking in Java——笔记(13)

    Strings Immutable Strings Objects of the String class are immutable. Every method in the class that ...

  6. canvas 拖拽实现

    Canvas 依赖分辨率 不支持事件处理器 弱的文本渲染能力 能够以 .png 或 .jpg 格式保存结果图像 最适合图像密集型的游戏,其中的许多对象会被频繁重绘 SVG 不依赖分辨率 支持事件处理器 ...

  7. Java:对象的强、软、弱、虚引用

    转自: http://zhangjunhd.blog.51cto.com/113473/53092 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无 ...

  8. C++ 函数形参发生动态绑定时指针增长步长与静态类型一致

    牛客网上的题: class A { public: long a; }; class B : public A { public: long b; }; void seta1(A* data, int ...

  9. 一个链接引发的血案---------服务器 IO及网络流量暴涨解决历程

    在这里介绍一次因为更改网站地址而引发服务器IO读取速度,网络流入流出速度暴涨10倍的解决经历. 环境:Ubuntu + Nginx + php-cgi + Wordpress 事情是这样的,现在网站使 ...

  10. Oracle merge into

    Oracle中Merge into用法总结 文件来源:(http://blog.csdn.net/yuzhic/article/details/1896878) 有一个表T,有两个字段a.b,我们想在 ...