JQGrid在标题栏中显示过滤器详细信息

时间:2010-07-08 14:29:53

标签: javascript jquery jqgrid

是否可以将当前应用的过滤器参数显示为附加到标题栏中主标题的描述性字符串

“客户 - [Field1 ='ABC'和Field2 ='CDE']”

在应用过滤器后找不到可以挂钩的事件?

2 个答案:

答案 0 :(得分:3)

我发现你在搜索后确实不需要举办活动。在每个搜索请求中,将重新加载网格中的数据。因此,您可以使用beforeRequestloadBeforeSendserializeGridDatagridCompleteloadComplete等事件。

从标题示例中我可以假设您使用“高级搜索”。我只想展示可能解决方案的主要思想,因此我选择了loadComplete来实现捕获更改:

jQuery('#list').jqGrid({
    // ...
    loadComplete: function(data) {
        var postData = jQuery('#list').getGridParam("postData");
        var newCapture = "Title";
        if (postData._search === true && typeof postData.filters !== "undefined") {
            var filters = jQuery.parseJSON(postData.filters);
            newCapture = "Title: [";
            var rules = filters.rules;
            for (var i=0; i<rules.length; i++) {
                var rule = rules[i];
                var op = rule.op;  // the code name of the operation
                if (jQuery.fn.searchFilter && jQuery.fn.searchFilter.defaults &&
                    jQuery.fn.searchFilter.defaults.operators) {
                    // find op description 
                    var operators = jQuery.fn.searchFilter.defaults.operators;
                    for (var j=0; j<operators.length; j++) {
                        if (operators[j].op === rule.op) {
                            op = operators[j].text;
                            //op = $.jgrid.search.odata[j];
                            break;
                        }
                    }
                }
                newCapture += rule.field + " " + op + " '" + rule.data + "'";
                if (i+1 !== rules.length)
                    newCapture += ", ";
            }
            newCapture += "]";
        }
        jQuery('#list').setCaption(newCapture);
    }
});

如果您不使用“高级搜索”,则应searchFieldsearchOpersearchString而不是filters根据搜索自助餐厅构建网格标题。

目前在示例中我没有使用本地化名称进行操作,但显然可以做到这一点。

答案 1 :(得分:0)

尝试连接到afterShowSearch事件,您将在其中更新网格标题。来自文档:

  

每次显示搜索对话框后,此事件将触发(如果已定义)