2016-08-04 18 views
0

私が達成しようとしているのは、ユーザーが剣道グリッドの列をソートするときに「自動」セカンダリ列ソートを適用することです。剣道グリッドの複数ソート/ DataSource - ソートを動的に設定する

したがって、this JS fiddle exampleでは、ユーザーが「値」でソートすると、「名前」でソートされます。 0は一緒にソートされますが、名前はアルファベット順ではありません。私はそれらをアルファベット順(二次的な並べ替え)にしたいと思います。

Here's an attemptこれを達成するためにデータソースの並べ替えをオーバーライドします。私は、ユーザーの元のソートを取って、 "SortedName"に追加のソートを追加しています。ログに記録されている並べ替え配列に基づいて、近いと思われるがまだ動作していない。

これを達成するための他のアイデアはありますか?

注:ユーザーが複数の列で並べ替えることを許可したくありません。私がこれを使用している現実世界の例は、50個以上の列を持つことができます(残念ながら)ので、複数のソートは混乱するかもしれません。そして私はそれが余分なユーザーの介入なしに場面の裏で行われることを望みます。剣道のデータソースの並べ替えを上書きするための

例コード():

dataSource.originalSort = dataSource.sort; 
dataSource.sort = function() { 
    // take the user's sort and apply sorting on an additional column 
    // the sort array should look like this: 
    [ 
     { field: "Value", dir: "asc" }, // this is what the user sorted by 
     { field: "SortedName", dir: "asc" }, // and I'm adding this 
    ] 
    return dataSource.originalSort.apply(this, arguments); 
} 
+0

剣道のソースにオプションを1行追加していますか?データソースソートメソッドが呼び出される直前に、kendo.columnsorter.jsで簡単にイベントをトリガーできます。これがオプションの場合は、使用している剣道のバージョンを教えてください。追加するコードと場所は教えてください。 – Failwyn

+0

これは間違いなくスタートです:)私は2016.1.112です。ありがとう! – dmathisen

答えて

1

以下のコードを試してみてください。

<div id="grid"> 
    </div> 
    <script> 
     var dataSource = new kendo.data.DataSource({ 
      data: [ 
       { Name: "Lisa", Value: 1 }, 
       { Name: "Dan", Value: 12 }, 
       { Name: "Ken", Value: 5 }, 
       { Name: "Arthur", Value: 15 }, 
       { Name: "Bob", Value: 0 }, 
       { Name: "Sally", Value: 0 }, 
       { Name: "Alexis", Value: 0 }, 
       { Name: "Cody", Value: 0 }, 
       { Name: "Steve", Value: 0 }, 
       { Name: "Andrew", Value: 0 }, 
       { Name: "Duke", Value: 0 } 
      ], 
      schema: { 
       model: { 
        fields: { 
         Name: { type: "string" }, 
         Value: { type: "number" } 
        } 
       } 
      } 
     }); 

     $("#grid").kendoGrid({ 
      dataSource: dataSource, 
      dataBound: function (e) { 
       var isSortedByName = false; 
       var grid = $("#grid").data("kendoGrid"); 
       var ds = grid.dataSource; 
       var sort = ds.sort(); 
       if (sort) { 
        for (var i = 0; i < sort.length; i++) { 
         if (sort[i].field == "Name") { 
          isSortedByName = true; 
         } 
        } 
        if (isSortedByName == false) { 

         sort.push({ field: "Name", dir: "asc" }); 
         ds.sort(sort); 
        } 
       } 
      }, 
      columns: [ 
       { field: "Name" }, 
       { field: "Value" } 
      ], 
      sortable: true 
     }); 
    </script> 
+0

それはやるよ!ありがとうございました。注:少し変更する必要がありました。ユーザーが並べ替えを別の列に変更すると、「並べ替え」が最後に適用されるため、[{field: "Name"、dir: "asc"}、 {field: "Value"、dir: "desc"}]、間違った並べ替えを生成しますが、それは簡単な修正です。 – dmathisen

関連する問題