2012-06-10 83 views
1

我需要幫助做關於使用過濾器工具欄下拉jqGrid的數據範圍選擇選擇 - 我檢查了SOPT選擇它只有 -的jqGrid:工具欄的搜索選項 - 範圍從下拉

['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本身的過濾器示例,但它們似乎都是用於搜索框的。 我很感激任何幫助來實現這一點,謝謝。

+0

您是否在服務器上使用本地過濾或過濾? – Oleg

+0

嗨奧列格,從現在的本地過濾,可能需要extedn這到服務器。我能夠修改你的多字例子來做範圍過濾。 –

+0

是的,我會建議你一樣。來自[答案](http://stackoverflow.com/a/8953934/315935)的代碼顯示瞭如何將一個搜索規則替換爲多個規則。使用該方法可以實現任何新的搜索規則。在服務器端搜索的情況下,實現更加容易。 – Oleg

回答

0

我能夠通過基於樣本多字樣本-的範圍來實現此過濾器。大部分代碼都是從上面提到的示例中稍作更改。根據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, '-');  
    }}); 
+0

奇怪的是,您使用'op:「cn」'來實現範圍。我認爲正確的是一個部分是'ge'',第二個是'le''。 – Oleg

+0

是的你是對的。我開始使用op:「cn」。我會修改,謝謝 –

+0

歡迎您! – Oleg