2016-06-27 4 views
2

配列を含む剣道グリッドの特定の列をフィルター処理したい。剣道配列を含むUIグリッドフィルターセル

グリッド構成は

var resultsGrid = this.kendoGrid({ 
     dataSource:{ 
      data:[], 
      pageSize:20 
     }, 
     sortable: { 
      mode: "multiple", 
      allowUnsort: true 
     }, 
     filterable: { 
      extra: false, 
      operators: { 
       string: { 
        startswith: "Starts with", 
        eq: "Is equal to", 
        neq: "Is not equal to" 
       } 
      } 
     }, 
     pageable: { 
      pageSizes: true, 
      buttonCount: 5 
     }, 
     scrollable: false, 
     columns: resultsColumns 
    }).data("kendoGrid"); 
    return resultsGrid; 

カラム構成は

var resultsColumns = [ 
    {field: "keys", filterable: true, headerTemplate: function(){return Ec.translatedLabel("authorityEntryCode");}, template: '#for(var i = 0; i < keys.length; i++){# #=keys[i].name# = #=keys[i].value# <br> #}#'}, 
    {field: "state", filterable: true, headerTemplate: function(){return Ec.translatedLabel("state");}}, 
    {field: "startDate", filterable: false, headerTemplate: function(){return Ec.translatedLabel("startDate");}}, 
    {command: initGridCommands(), headerTemplate: function(){return Ec.translatedLabel("actions");}} 
]; 

であり、Iは、フィールドキー

フィールドキーでカラムをフィルタリングしたい含むオブジェクトの配列であります名前と値と私は値でフィルタリングしたい。

例えば

Example of the Grid

ユーザが最初の行をフィルタリングするためのスクリーンショットのようにA1を付加します。

お返事がありましたら、お手数ですが、ありがとうございます。

答えて

1

残念ながら、これは私の意見ではやや難しいことです。一般的なプロセスでは、filterMenuInit eventにバインドする必要があります。デフォルトのフィルタの内容を削除して独自のフォームをポップアップし、必要な特定のフィールドに対して手動でフィルタリングを実行します。私は、配列フィールドでフィルタリングを実行する方法を知っていません。必要なのものだけを上書きハックバージョンは次のように考えられます。

filterMenuInit: function(e) { 
      if (e.field == "keys") { 
      var filterButton = e.container.find("button[type=submit]"); 
      var clearButton = e.container.find("button[type=reset]"); 
      var dataSource = jQuery("#grid").data("kendoGrid").dataSource; 

      //Get rid of default filter button... 
      filterButton.remove(); 

      clearButton.parent().prepend("<button type='button' class='k-button k-primary'>Filter</button>"); 

      var filterText = e.container.find(".k-textbox"); 
      filterButton = e.container.find("button[type=button]"); 

      filterButton.click(function(e) { 
       e.preventDefault(); 

       dataSource.filter([ 
       { 
        field: 'keys', 
        operator: function (items, filterValue) { 
         for(var i = 0; i < items.length; i++) { 
         if(items[i].value == filterText.val()) { 
          return true; 
         } 
         } 
         return false; 
        }, 
        value: filterText.val() 
       } 
      ]); 
      }); 

      clearButton.click(function() { 
       dataSource.filter([]); //clear filters... 
      }); 
      } 
     }, 

このコードを迅速かつ汚れているので、私はクリーンな解決策を考え出すfilterMenuInit eventdata source filteringに関するドキュメントをお読みになることをお勧めしたいです。 Here is a snippet as well.

+0

大変ありがとうございました。あなたのソリューションは、私を大きく助けました。フィルタ演算子をいくつか変更して、必要な "contains"演算と "eq"演算を理解しました。また、フィルターボタンをクリックしたときにドロップダウンが値を失っていたので問題が発生しましたので、いくつか修正しました。変更を含むスニペットの例http://dojo.telerik.com/ODiWa/3 – Sfalagkiaris