在jqGrid的子网格上,右边框不可见

时间:2017-09-22 08:51:24

标签: jqgrid free-jqgrid

我正在使用免费的jqGrid版本4.15.0,我在主网格中有一个子网格,并且子网格的右边框不可见。

jQuery版本:1.12.4
jQuery UI版本:1.11.4
fontawesome版本:4.7.0

请参阅我的小提琴或以下代码段:https://jsfiddle.net/eL7h9e8z/
您需要单击+号以显示子网格。



var maingriddata = [{
  Column1: "Test1",
  Column2: "Test1",
  ShowSubGrid: true
}, {
  Column1: "Test2",
  Column2: "Test2",
  ShowSubGrid: false
}];

var subgridData = [{
  SubCol1: 'SubCol1',
  SubCol2: 'SubCol2',
  SubCol3: 'SubCol3'
}, {
  SubCol1: 'SubCol11',
  SubCol2: 'SubCol22',
  SubCol3: 'SubCol33'
}];

$(function() {
  "use strict";
  var $grid = $("#policyGrid");

  $grid.jqGrid({
      datatype: "local",
      data: maingriddata,
      colNames: ["Column1", "Column2", "", ""],
      colModel: [{
        name: "Column1",
        width: 50
      }, {
        name: "Column2"
      }, {
        name: "viewsubgrid",
        align: "center",
        width: 21,
        formatter: function(cellvalue, options, rowObject) {
          if (rowObject.ShowSubGrid) {
            return "<span class='fa fa-fw fa-plus subgridIcon'></span>";
          } else {
            return "&nbsp;";
          }
        }
      }, {
        name: "ShowSubGrid",
        hidden: true
      }],
      cmTemplate: {
        sortable: false,
        resizable: false
      },
      iconSet: "fontAwesome",
      loadonce: true,
      altRows: true,
      caption: "",
      width: '100%',
      height: '100%',
      shrinkToFit: true,
      autowidth: true,
      height: 380,
      pgbuttons: false,
      pgtext: null,
      toppager: false,
      pager: true,
      rownumbers: false,
      threeStateSort: false,
      subGrid: true,
      subGridOptions: {
        hasSubgrid: function(options) {
          return options.data.ShowSubGrid;
        },
        reloadOnExpand: false,
        openicon: "ui-helper-hidden"
      },
      subGridRowExpanded: function(subgridDivId, rowId) {
        var subgrid_table_id, pager_id;
        subgrid_table_id = subgridDivId + "_t";
        pager_id = "p_" + subgrid_table_id;
        var $table = $("<table id='" + subgrid_table_id + "' class='scroll'></table>");
        $("#" + subgridDivId).append($table);
        $("#" + subgrid_table_id).jqGrid({
          datatype: "local",
          data: subgridData,
          colNames: ['Sub Col 1', 'Sub Col 2', 'Sub Col 3'],
          colModel: [{
            name: "SubCol1",
            width: 100,
            resizable: false
          }, {
            name: "SubCol2"
          }, {
            name: "SubCol3"
          }, ],
          cmTemplate: {
            sortable: false
          },
          rowNum: 0,
          pgbuttons: false,
          pgtext: null,
          sortable: false,
          toppager: false,
          viewrecords: true,
          pager: true,
          rownumbers: false,
          height: '80px',
          autoresizeOnLoad: true,
          idPrefix: subgridDivId + "_" + rowId + "_",
          loadComplete: function(data) {
            $("#" + subgrid_table_id).jqGrid("setGridHeight", '100%');
          },
          beforeSelectRow: function(rowid, e) {
            return false;
          }
        }).unbind("contextmenu");
        $("#" + subgrid_table_id).jqGrid('navGrid', {
          add: false,
          edit: false,
          del: false,
          refresh: false,
          search: false
        });
      },
      beforeSelectRow: function(rowid, e) {
        var iCol = $.jgrid.getCellIndex(e.target);
        if (iCol == $grid.jqGrid("getGridParam", "iColByName")['viewsubgrid']) {
          var $btn = $(e.target).closest("td").find('.subgridIcon');
          var $tr = $(e.target).closest("tr.jqgrow");
          if ($tr.find(">td.sgcollapsed").length > 0) {
            $(this).jqGrid("expandSubGridRow", rowid);
            $btn.removeClass('fa-plus').addClass('fa-minus');
          } else {
            $(this).jqGrid("collapseSubGridRow", rowid);
            $btn.removeClass('fa-minus').addClass('fa-plus');
          }
        }
        return false;
      }
    }).jqGrid("navGrid", {
      add: false,
      edit: false,
      del: false,
      refresh: false,
      search: false
    })
    .jqGrid("hideCol", "subgrid")
    .unbind("contextmenu");
});
&#13;
.ui-helper-hidden {
  display: none
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>
<script type='text/javascript'>
$.jgrid = $.jgrid || {};
$.jgrid.no_legacy_api = true;
$.jgrid.useJSON = true;
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.0/jquery.jqgrid.src.js"></script>
<link href="https://code.jquery.com/ui/1.11.4/themes/redmond/jquery-ui.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.0/css/ui.jqgrid.css" rel="stylesheet"/>

<div id="pnlGrid" style="margin-left: 10px; margin-right: 10px;width:700px;">
  <table id="policyGrid">
  </table>
</div>
&#13;
&#13;
&#13;

Missing border image

enter image description here

我注意到,如果我减少(手动)&#39; .ui-jqgrid-hdiv&#39;。&quot; .ui-jqgrid-bdiv&#39; &安培; &#39;的.ui-的jqGrid寻呼机&#39;通过2px,边框可见。

有人有想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

感谢您提供错误报告和演示,以重现问题!

问题的原因是在网格为子网格的情况下,在box-sizing(网格的外部div)上使用了错误的.ui-jqgrid。所有jqGrid元素的box-sizing应为border-box,唯一的异常.ui-jqgrid应为content-box。可以通过添加以下附加CSS规则来解决问题:

.subgrid-data > .tablediv > .ui-jqgrid {
    -moz-box-sizing: content-box;
    -webkit-box-sizing: content-box;
    box-sizing: content-box;
}
.subgrid-data > .tablediv > .ui-jqgrid > .ui-jqgrid-view {
    -moz-box-sizing: border-box;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
}

第一条规则将box-sizing的{​​{1}}重置为.ui-jqgrid,下一条规则将content-box更改为border-box。我也在GitHub上更新了.ui-jqgrid-view的主要代码(请参阅the commit)。

演示https://jsfiddle.net/OlegKi/eL7h9e8z/2/演示了更改的工作原理。我在您的代码中做了一些其他小的更改来修复一些小问题。