2013-04-18 64 views
0

我已经为我的子网格固定了行数为10,但是如果reccount小于10,我想将高度子网格调整为“auto”或“100%”。jqGrid filtertoolbar在网格调整大小后没有触发

所以这是我对这个子网格代码:

// SUBGRID FOURTH LEVEL 
var subgrid_table_id = subgrid_id+"_d", 
    pager_id = "p_"+subgrid_table_id; 
$("#"+subgrid_id).append("<table id='"+subgrid_table_id+"' class='scroll'></table><div id='"+pager_id+"' class='scroll'></div>"); 
$("#"+subgrid_table_id).jqGrid({ 
    url:"sg31b.php?id="+row_id+"&clt="+clt, 
    datatype: "json", 
    idPrefix:"sgd_", 
    colNames: ['Id','Article','Désignation','Marque','Equivalence'], 
    colModel: [ 
     {name:'e.id',index:'e.id',hidden:true}, 
     {name:'a.code',index:'a.code', width:100}, 
     {name:'a.descr',index:'a.descr', width:450}, 
     {name:'k.code',index:'k.code', width:80}, 
     {name:'e.equiv',index:'e.equiv',width:100} 
    ], 
    pager: pager_id, 
    sortname: 'a.code', 
    hiddengrid:true, 
    scroll:true, 
    height:230, 
    rowNum:10, 
    autowidth:true, 
    caption:'4 - EQUIVALENCE ARTICLES', 
    gridComplete:function(){ 
     sortDataCol(this); 
     if($("#"+subgrid_id+"_d").jqGrid('getGridParam','records') < $("#"+subgrid_id+"_d").jqGrid('getGridParam','rowNum')){ 
      $("#"+subgrid_id+"_d").jqGrid('setGridHeight','100%'); 
     }else{ 
      $("#"+subgrid_id+"_d").jqGrid('setGridParam',[{npage:1}]).jqGrid('setGridHeight',230); 
     } 
    } 
}); 
$("#"+subgrid_table_id).jqGrid('navGrid',"#"+pager_id,{search:false,add:false,edit:false,del:false}); 
$("#"+subgrid_table_id).jqGrid('filterToolbar',{stringResult: true,searchOnEnter : false}); 
fullInputCss(); 

和结果不到10个过滤行快照: enter image description here

现在,如果我按Backspace键在搜索领域获得更多的行,似乎搜索不火,因为萤火虫不显示的请求的任何痕迹: enter image description here

如果我删除添加“setGridHeight”在gridcomplete线,全部运行良好! 我认为我再一次在编码和理解jqGrid的运行方式上出错了。 请有人给我一些方法来解决这个麻烦? 非常感谢提前。祝你今天愉快。 JiheL

+0

尝试删除您使用的'scroll:true'。虚拟滚动通常是很好的功能,但jqGrid中的实现包含许多错误和副作用。我不建议你在名称中使用'.',并且建议你删除'index'属性,如果它具有与'name'属性相同的值。您应该在每个回调中更好地使用'$(this)'而不是'$(“#”+ subgrid_id +“_ d”)''。你可以删除不需要的'class ='scroll''(使用两次),并在'idPrefix'中包含'row_id',因为在同一时间内可以打开更多的不同行作为一个子网格。目前你生成的id重复。 – Oleg 2013-04-18 07:46:55

+0

我建议您在所发布的代码中添加“jquery”或“javascript”作为所有jqGrid问题的附加标记,以获得更好的颜色。或者,您可以在代码之前包含'<! - language:lang-js - >'(不要忘记在代码和注释之间包含一个空行)。有关详细信息,请参见[此处](http://meta.stackexchange.com/a/81970/147495)。 – Oleg 2013-04-18 09:05:39

+0

只想评论一下,我喜欢屏幕截图中的网格颜色/样式:) – Losbear 2013-07-30 13:49:30

回答

2

我想,问题的根源可能是在您的网页上重复。刚才我写了the answer另一个问题,我描述了详细的问题。

当前实现的jqGrid的(4.4.5版本)具有在filterToolbar的代码,其用于基于以下规则的过滤器的工具栏的输入栏构建id问题:

ID =“gs_” + cm.name

(参见代码the line)。这意味着对于使用的每个子网格,列a.code的输入字段的ID将为gs_a.code。所以你可以有id重复。

因此,我建议您重新设计代码中的命名概念。您可以使用例如

name: row_id + "a_code", index: "a.code" 

在像"a.code"值将电网的分拣过程中仍然发送的方式,但你不会有任何的ID重复。在某些情况下(您在jsonReader中使用repeatitems: false),您可能需要使用额外的jsonmap属性,但在当前代码中不需要它。