【问题标题】:JQGrid Show filter detail in title barJQGrid 在标题栏中显示过滤器详细信息
【发布时间】:2010-07-08 14:29:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:

    我发现您在搜索后并不需要举办活动。在每次搜索请求时,都会重新加载网格中的数据。因此,您可以使用 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 来根据搜索条件构建网格标题。

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

    【讨论】:

    • @Oleg - 很好的解决方案。我不明白您对如何在标题栏中包含工具栏搜索条件的最后评论。似乎工具栏搜索只是将实际字段和值添加到帖子数据中。因此,如果我在名为 Description 的字段中搜索“test”,我只会在 postdata 中看到一个名为 Description 的元素,其值为“test”。我没有看到任何“searchField”、“searchOper”和“searchString”。另外,您如何支持多个工具栏列搜索??
    • @Oleg - 对我上面的评论有什么想法吗??
    • @ooo:当前代码将文本“Title: [...]”放在网格捕获中。文本“Title”是英文的,所以没有本地化。@里面的文本987654335@ 包含本地化文本,例如德语中的“beginnt mit”而不是英语中的“begins with”。在最后一句中,我解释说可以编写选择“标题”的代码也对应于语言。另外,而不是 rule.field 一个可以使用相应列的列标题。如果将代码包含在一个网格中,您就会明白我的意思。
    • @ooo:如果使用Single Field Searching 而不是Advanced Searching,则属性searchFieldsearchOpersearchString 将在postData 内部使用而不是filters。示例中的代码仅适用于“高级搜索”。
    • @ooo:我以为你问了关于你评论的我的答案的问题,但你提出了新问题。对于您的第一个问题“我没有看到任何“searchField”、“searchOper”和“searchString”。此外,您将如何支持多个工具栏列搜索”。对于soptsearchoptions,您只能在工具栏中搜索的每列定义一个搜索操作(“searchOper”)。您不能为每列定义一个以上的搜索条件。
    【解决方案2】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2018-06-02
    • 1970-01-01
    • 2015-07-21
    相关资源
    最近更新 更多