好吧,我正在用这个敲打我的头,因为我在许多应用程序中使用了jqgrid,类似的代码在其他所有情况下工作但是这个! 这是代码......
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 :(得分: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”来过滤数据:
如果您将jsonmap
用作函数,则可以解决问题:
jsonmap: function (obj) {
var f = obj.formula;
return f.substring(f.indexOf('=')+1);
}
而不是对“公式”列使用custom formatter。如果值“100”将在本地保存,并且数据过滤按预期工作:
查看相应的演示here。