2011-08-25 85 views
1

嗯,我用头撞墙,因为我在很多应用程序中使用jqgrid,而类似的代码在其他情况下工作,但是这个! 这里是代码...jqgrid filterToolbar不能正常工作

var pfct = $("#pfc_table"); 
pfct.jqGrid({ 
     url: 'costs', 
     datatype: 'json', 
     'postData': JSON.stringify(getConds()), 
     mtype: 'POST', 
     colNames:['Id','Name','Formula','Conditions'], 
     colModel :[ 
      {name:'id', index:'id', width:40, search:true}, 
      {name:'name', index:'name', width:130, search:true}, 
      { 
       name:'formula', index:'formula',width:310, search:true, 
       formatter : function(value, options, rData){ 
        return value.substring(value.indexOf('=')+1); 
       } 
      }, 
      {name:'conditionstr', index:'conditionstr', width:160,search:true} 
     ], 
     jsonReader: { 
      repeatitems:false, 
      root: function (r) { return r.data.rows; }, 
      page: function (r) { return r.data.currpage; }, 
      total: function (r) { return r.data.totalpages; }, 
      records: function (r) { return r.data.totalrecords; } 
     }, 
     gridComplete: function() { 
     }, 
     gridview: true, 
     height: 'auto', 
     autowidth: true, 
     pager: '#pfc_pager', 
     rowNum:25, 
     viewrecords: true, 
     loadonce: true, 
     ignoreCase: true, 
     multiselect: false, 
     pagination: true 
}); 
pfct.navGrid('#pfc_pager',{edit:false,add:false,del:false,search:false,refresh:false}); 
pfct.jqGrid('filterToolbar',{stringResult: true,searchOnEnter: false}); 

JSON数据我发送有没有在colmodel定义,但是这个从来没有在过去的一个问题,一些额外的属性。本地排序和分页工作正常,但过滤不! 根据记录,这是该数据的样子:

{"data":{"totalpages":1,"currpage":1,"totalrecords":10,"rows":[{"name":"Test","id":18195,"level":0,"currency":"EUR","default":true,"formula":"f_18195()=110","ownerId":1,"categoryName":"Test cat","parentId":0,"rebate":0,"portDues":true,"modified":1310036286000,"conditionstr":"Condition 1, Condition 2"}],"userdata":null},"status":true,"responseError":null} 
+0

你的意思是说,'name'列中的过滤不起作用,或者你在所有列中过滤都有问题? getConds函数是什么?你可以发布'getConds'的代码,或者如果你删除''postData',试试你是否有过滤问题:JSON.stringify(getConds())'? – Oleg

+0

筛选不适用于任何列。 getConds()创建一个简单的JavaScript对象,它有一个整数数组并且工作正常(服务器解析并返回匹配结果)。我会尝试删除这个,但我怀疑它有什么关系。我注意到的其他事情是,如果我尝试预先在列上执行排序(默认排序),它不起作用,但之后会起作用(通过单击该列)。另外,如果我在任何过滤器文本框上键入某些内容,则会应用默认排序,但不会被过滤。我想我会使用jqgrid的源代码和调试 – nvrs

+0

嗯,我尝试使用本地数据,现在它应该可以正常工作。实际数据没有区别,表格定义中的唯一更改与现在的本地数据有关。 Wierd ... – nvrs

回答

1

original grid有一个问题。您可以使用custom formatter的“公式”栏:

formatter : function(value, options, rData){ 
    return value.substring(value.indexOf('=')+1); 
} 

所以数据"f_18195()=110"将显示为"100"。在datatype: 'json'没有loadonce: true的情况下工作良好,但在loadonce: true的情况下工作不正确。问题是在formula列本地保存的数据将是"f_18195()=110"而不是"100"。因此,该数据在滤波过程中必须键入“F”或“f_18195()= 1”,而不是“1”来过滤数据:

enter image description here

可以解决这个问题,如果你会使用jsonmap作为功​​能:

jsonmap: function (obj) { 
    var f = obj.formula; 
    return f.substring(f.indexOf('=')+1); 
} 

而不是使用custom formatter用于'公式'列。在这种情况下值“100”将被保存到本地数据的过滤按预期工作:

enter image description here

请参见相应的演示here

+0

好东西,谢谢。 – nvrs

+0

@nvrs:不客气! – Oleg