【问题标题】:Jqgrid : toolbar search options - range select from a drop downJqgrid:工具栏搜索选项 - 从下拉列表中选择范围
【发布时间】:2012-06-13 17:47:44
【问题描述】:

我需要帮助才能使用过滤器工具栏下拉菜单对 jqgrid 数据进行范围选择 - 我检查了它仅有的 sopt 选项 -

['equal','not equal', 'less', 'less or equal','greater','greater or equal', 'begins with','does not begin with','is in','is not in','ends with','does not end with','contains','does not contain']

我无法在工具栏上找到有关如何使用此范围进行范围的任何线索。我的过滤器工具栏上有一个下拉菜单,其中包含 "All", "1-4", "5-9" 之类的值,当我选择 '1-4' 时,我希望网格填充该范围内的所有行。我查看了一堆来自 stackoverflow 和 trirand 本身的过滤器示例,但它们似乎都用于搜索框。 感谢您为实现这一目标提供的任何帮助,谢谢。

【问题讨论】:

  • 你是在服务器上使用本地过滤还是过滤?
  • 嗨 Oleg,到目前为止,本地过滤可能需要将其扩展到服务器。我能够修改您的多词示例以进行范围过滤。
  • 是的,我也建议您这样做。 the answer 中的代码显示了如何将一个搜索规则替换为多个规则。使用该方法,您可以实现任何新的搜索规则。在服务器端搜索的情况下,实现更加容易。

标签: jquery jqgrid


【解决方案1】:

我能够根据示例多字样本-http://www.ok-soft-gmbh.com/jqGrid/MultiwordSearchingToolbar.htm 按范围实现此过滤器。大部分代码来自上述示例,稍作改动。根据 Oleg 的反馈修改为 le 和 ge。

    modifySearchingFilter = function (separator) {
            var i, rules, rule, parts, group, str;
            var filters = $.parseJSON(this.p.postData.filters); 
            if(separator != '-')
              return;
            if (filters && typeof filters.rules !== 'undefined' && filters.rules.length > 0) {
                rules = filters.rules;
                for (i = 0; i < rules.length; i++) {
                    rule = rules[i];
                    if (rule.op === 'range') {
                        // Range should only have 2 parts lowerbound and upperbound
                        parts = rule.data.split(separator);
                        if (parts.length == 2) {
                            if (typeof filters.groups === 'undefined') {
                                    filters.groups = [];
                            }
                            group = {
                                groupOp: 'AND',
                                groups: [],
                                rules: []
                            };
                            filters.groups.push(group);
                            // Breaking to 2 rules one le and other ge
                            group.rules.push({
                                        data: (parts[0]),
                                        op: "ge",
                                        field: rule.field
                                    });                             
                            group.rules.push({
                                        data: (parts[1]),
                                        op: "le",
                                        field: rule.field
                                    });                                                                     
                            rules.splice(i, 1);     
                            i--; // to skip i++                             
                        }
                    }
                }
                this.p.postData.filters = JSON.stringify(filters);
            }
        },


 //using range op so that it is not confused with other ops
 setRangeSearchSelect = function(columnName) {
        grid.jqGrid('setColProp', columnName,
        {
           stype: 'select',
           searchoptions: {                                 value:buildRangeSearchSelect(),
                 sopt:['range'],                            
        }
     });
    };

 grid.jqGrid('filterToolbar',  
    {
     stringResult:true, 
     searchOnEnter:true,      
     defaultSearch:"cn", 
     beforeSearch: function () {  
       modifySearchingFilter.call(this, '-');    
     }});

【讨论】:

  • 你使用op: "cn" 来实现范围很奇怪。我认为正确的部分是'ge',第二部分是'le'
  • 是的,你是对的。我不能使用 op:"cn"。我会修改的,谢谢
  • @Siva VG : 嗨,我在 reng 中搜索时遇到问题,请给我任何演示,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-18
  • 2012-05-20
  • 2017-05-19
  • 1970-01-01
相关资源
最近更新 更多