jquery-ui - 在列上使用格式化程序时,JQGrid 过滤器工具栏不过滤行

标签 jquery-ui jquery jqgrid jqgrid-formatter

因此,在当前的应用程序中,我必须在 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 的列进行过滤,其值分别为:abc123

使用这些值并通过类似操作查询数据库,如下所示:

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/

相关文章:

jquery - 确定 jQuery UI Draggable 是否已初始化

javascript - AJAX 成功代码中的自定义切换功能

javascript - 处于 Bootstrap 模式时 Ckeditor 错误

jquery - 使用 CSS 为 SVG 路径元素的填充设置动画

javascript - 在 jQGrid 中报告用户错误

javascript - jquery克隆拖拽

jquery - 如何从 textarea jquery UI 对话框中获取文本

javascript - Jqgrid 不会随着分辨率的变化而调整大小

javascript - 如何清除jqgrid表中的大数据?

javascript - jqGrid:列调整大小触发点击事件