有时候需求需要默认加载表格的时候把子表格的数据也显示出来,经过研究相关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. Hyper-V~双网卡设置

    Windows: Win10 有线网卡+无线网卡各一块 Hyper-V: 10.0.10240.16384 公司网络服务器180网段,公网192.168.0.*网段 家里网络:192.168.1.*网 ...

  2. Bootstrap响应式栅格系统的设计原理

    1.历史背景 Bootstrap是Twitter的工程师Mark Otto和Jacob Thornton开发的一套供内部使用的UI框架,于2011年开源.2012年发布的第二版中新增了12列栅格系统和 ...

  3. Robot Framework 的安装和配置(转载)

    Robot Framework 的安装和配置 在使用 RF(Rebot framework)的时候需要 Python 或 Jython 环境,具体可根据自己的需求来确定.本文以在有 Python 的环 ...

  4. A Taxonomy of Parallel Processor Architectures

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION

  5. Netty In Action

    1 introduction 1.2 Asynchronous by design two most common ways to work with or implement an asynchro ...

  6. 真机测试及布署Code Sign error问题总结

    Code Sign error: Certificate identity 'iPhone Developer: idf (XR9HN3TD7E)' appears more than once in ...

  7. js == 与 === 的区别,‘’与“”的区别

    js == 与 === 的区别 1.对于string,number等基础类型,==和===是有区别的 1)不同类型间比较,==之比较"转化成同一类型后的值"看"值&quo ...

  8. 读懂UI设计的心理学

    好文转载,版权归原作者 作为UI设计师,对待用户就像对待婴儿,知道如何通过界面设计诱导用户非常重要,这就需要了解心理学方面的知识了.今天分享一篇日本设计师的好文,结合心理学与设计,教你读懂心理学,提高 ...

  9. NSMutableRLEArray objectAtIndex:effectiveRange:: Out of bounds

     Bugly:  Trapped uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objectAtIndex:eff ...

  10. 关于InvokeRequired与Invoke

    from:http://www.th7.cn/Program/net/201306/140033.shtml Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性.因此,如果从另一个线程调 ...