因此,在当前的应用程序中,我必须在 jqGrid 中的几行上使用自定义格式化程序。所有这些所做的就是从我的 ajax 调用中获取一些字段,将它们连接成一个,然后将其放入一行。
EG ( data.toStreet + data.toCity + data.toState + data.toZip ) 以“街道城市、州邮政编码”的形式返回到“收件人地址”列中。这工作正常并且数据显示正确,但是当使用过滤工具栏时,过滤器仅基于第一个 val (data.street)。下面是相关代码片段的 super 简化版本。
$('#grid').jqGrid({
...
colNames:["AddressTo", "AddressFrom"],
colModel:[
{name:"toStreet" formatter: ToAddressFormatter},
{name:"fromStreet" formatter: FromAddressFormatter}
],
...
}),
$('#grid').jqGrid('filterToolbar',
{
stringResult:true,
searchOnenter: true,
defaultSearch: 'cn'
}
});
ToAddressFormatter = function(el, opt, rowObj){
var address = rowObj.toStreet+ " " + rowObj.toCity + ", " + rowObj.toState + " " + rowObj.toZip;
return address;
},
FromAddressFormatter = function(el, opt, rowObj){
var address = rowObj.fromStreet+ " " + rowObj.fromCity + ", " + rowObj.fromState + " " + rowObj.fromZip;
return address;
}
因此,如果格式化后 cel 中的值显示“123 fake st, springfield, Va 22344”,则过滤器工具栏只能搜索“123 fake st”,而不能搜索其他内容。 有谁知道如何解决这个问题,或者可能为什么会发生这种情况,以及一个好的解决方法吗?
编辑: 我已经包含了网格的开头。另外,result.d 的属性 Address 是在下面的代码中创建的,而不是从 Web 服务返回。我的列映射到“地址”,它可以正确显示格式,但仍然无法按预期进行搜索。
$('#grdDisasters').jqGrid({
datatype: function(postdata) {
var obj = { "showActive": $('#btnFilterActive.pressed').length > 0 ? true : false, "showInactive": $('#btnFilterActive.pressed').length > 0 ? true : false,
'page': postdata.page, 'rows': postdata.rows, 'sortIndex': postdata.sidx, 'sortDirection': postdata.sord, 'search': postdata._search,
'filters': postdata.filters || ''
};
$.ajax({
url: "/GetGrid",
data: JSON.stringify(obj),
success: function(result) {
for (var i = 0, il = result.d.rows.length; i < il; i++) {
LoadedDisasters[i] = result.d.rows[i];
result.d.rows[i].cells.Address = result.d.rows[i].cells.Street + " " + result.d.rows[i].cells.City + ", "+ result.d.rows[i].cells.State+ " "+ result.d.rows[i].cells.Zip;
}
result.d = NET.format(result.d);//just correctly format dates
UpdateJQGridData($('#grdDisasters'), result.d);
},
error: function(result) {
//alert("Test failed");
}
});
最佳答案
当使用自定义/预定义格式化程序格式化数据时,jqGrid 在过滤行时出现问题。
您必须在服务器端过滤行。
在 Controller 中添加 2 个请求参数来处理 jqgrid 搜索请求:
当 jqGrid 请求过滤后的原始数据时,它将添加一个参数:_search
,其值为:true
以及所有搜索参数,如 col1=abc&col4=123
,表示用户希望使用名为 col1
的列和名为 col4
的列进行过滤,其值分别为:abc
和123
使用这些值并通过类似操作查询数据库,如下所示:
select id, concat(street1, street2, city, state, zip) as address
where address like "%abc%" and id like "%123%"
将这些行作为 json 返回到 jqGrid 并在当前页面中显示它们。所以基本上你必须有一个带有服务器端分页、排序和搜索功能的 jqGrid。您不能使用客户端分页、排序和搜索功能。另外,请确保您没有设置 loadonce: true
。
关于jquery-ui - 在列上使用格式化程序时,JQGrid 过滤器工具栏不过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10110393/