滚动后jqGrid子网格停止打开

时间:2011-10-18 23:24:14

标签: jqgrid local subgrid

我有一个使用subGrid的网格(版本4.1.1)。我正在使用loadonce:true并滚动:1。当网格首次加载时,我可以打开subGrids没有问题,直到我将主网格向下滚动到加载更多数据的点。之后,不会打开或关闭子网格。如果我点击加号图标,我会看到“正在加载...”,但没有任何反应。我甚至无法关闭之前打开过的subGrids。

这是我的网格定义:

$("#grid_sites").jqGrid({
url:'getgridxmlsites.php',
      postData: {detailid: function() {return $('#hdnDetailId').val(); }},
datatype: 'xml',
height: 260,
width: 832,
shrinkToFit: false,
caption:'',
colNames :['studydetailid', 'Site', 'Name', 'Status', 'Location'],
colModel :[
   {name:'detailid',     index:'detailid', width:0, hidden: true },
   {name:'sitenumber',   index:'sitenumber',    width:60,   align:'right'},
   {name:'name',         index:'name',      width:230},
   {name:'status',       index:'status',        width:110,  align:'center'},
         {name:'location',       index:'location',  width:74}
       ],
 pager:'pager_sites',
 scroll: 1,
 viewrecords:true,
 sortable:true,
 sortname: 'sitenumber',
 autowidth: true,
 pgbuttons: false,
 loadonce: true,
//      gridview: true, // Cannot be used when using subGrid.
 onSelectRow: function(id){ gridRowSelect(id) },
 subGrid: true,
 subGridUrl: 'getgridxmldatabysite.php',
 subgridtype: 'xml',
 subGridModel: [{
        name: ['Owner', 'Phone', 'Status'],
        width: [120, 100, 100],
        align: ['left', 'left', 'left'],
        params: ['detailid']
    }],
  subGridOptions: { reloadOnExpand : false }
});

我希望你能提供帮助。

3 个答案:

答案 0 :(得分:3)

我遇到了类似的问题。看起来jqgrid中的addSubGrid函数正在添加一个click事件来将子网格切换到表中的每一行(而不仅仅是刚刚加载的那一行)。

这导致新行表现良好但第一组设置为快速展开然后折叠(两个点击处理程序)。当另一组数据被加载时,第一组行正常工作(尽管它们会扩展,折叠和再次展开),但第二组不再有效。

在尝试弄清楚我是否遗漏了JSON中的某些行元数据时,我在addJSON和addSubGrid的组合中迷失了方向。现在我只修改了这一行:

$(ts.rows[i].cells[pos]).bind('click', function(e) {

为:

$(ts.rows[i].cells[pos]).unbind('click');
$(ts.rows[i].cells[pos]).bind('click', function(e) {

一切似乎按预期工作。这适用于jqGrid的4.2.0版。我仍然不确定这是一个错误,配置问题还是数据问题,但至少我还在工作。

答案 1 :(得分:0)

典型的"Loading..."表示处理服务器响应时出错。我建议您使用jquery.jqGrid.src.js代替jquery.jqGrid.min.js并在调试器中启动您的页面。例如,您可以使用Internet Explorer的开发人员工具。这样做你应该按 F12 启动开发人员工具,然后选择“脚本”并单击“开始调试”按钮。页面将在出错时停止,或者您将在右侧窗格的“Colsole”中看到一些其他信息。

由于数据处理的复杂性和不同的已知错误或问题,我个人不使用scroll: 1选项。在我看来,您使用不兼容的参数组合。我建议您删除loadonce: truescroll: 1参数。

答案 2 :(得分:0)

在您的配置中,您不设置rowNum。所以我相信jqgrid将使用默认的rowNum,即20。由于Robert Simmons提到的点击绑定问题,导致滚动问题。

解决此问题而无需更改jqgrid代码的另一种方法是将rowNum设置为-1。这将获得所有行,这应该没问题,因为您使用的是本地数据。但是,此修补程序可能不适用于以前的4.6.0版本。 (有关将rowNum设置为-1的更多信息,请参阅How to show all rows in the jqGrid?)。在4.6.0之前的版本中,我认为主要解决方案是将rowNum设置为大数。