2013-05-03 14 views
8

剣道UIグリッドでグループの順序を制御する方法はありますか?他のグループの前に行きたいグループがありますが、剣道UIグリッドはグループをアルファベット順に並べ替えているようです。私は、グループ名にスペースを追加することは効果があることを知っていますが、それは非常にハックされているようです。剣道UIグリッドでグループの順序を制御する

columns: [ 
{ 
field: "LastName", 
title: "Last Name" 
}, 
{ 
field: "FirstName", 
title: "First Name" 
} 
] 
+0

名前の前に(バックエンドから)スペースを追加することについてのヒントをありがとう - UIでレンダリングされると、スペースは実際に削除されます –

答えて

5

現在、グループのフィールド以外でグループを並べ替える方法はありません。 TelerikがKendo以外のグリッドで行っているようなグループを並べ替える方法を持っているのは、今私にとって彼らにとって最大の機能要求です。私たちは今のところハックを使って立ち往生しています。

ソートフィールドと表示フィールドを、非表示のスパンの内側にあるソートフィールド部分を非表示にする新しい文字列に組み合わせることは、私にはうってつけです。これはデータソース側(私にとってはSQL)で行われます。並べ替えフィールドが数字であっても、新しい列は文字列としてソートされるため、場合によっては適切にパッドする必要があります。

例えば、私のデータであった場合:

[ 
    { 
     'Name': 'Alice', 
     'Rank': 10, 
     'RankName': '<span class="myHiddenClass">10</span>Alice', 
     ... (other fields) 
    }, 
    { 
     'Name': 'Bob', 
     'Rank': 9, 
     'RankName': '<span class="myHiddenClass">09</span>Bob', 
     ... (other fields) 
    }, 
    { 
     'Name': 'Eve', 
     'Rank': 11, 
     'RankName': '<span class="myHiddenClass">11</span>Eve', 
     ... (other fields) 
    } 
    ... (Multiple Alice/Bob/Eve records) 
] 

そこで私はできRankNameフィールドの代わりに、[名前]フィールドでグループ。グループヘッダーに名前フィールドが表示されますが、ランクフィールドでソートされます。この場合、Aliceが最初にアルファベット順であったにもかかわらず、Bobが最初のグループとして表示されます。これは、あなたが言及したスペースパディングと同様に機能します。

-2

使用の列は、列の順序を指定する - 基でありますグループ化されていないときに列がソートされるのと同じ方法でソートされます(クライアントソートを使用する場合)。ソートの方向はJavaScriptのデフォルトソートと同じです。

0

グループ化する際に、カスタムの方向をソートするには、グリッドでサポートされてないあるなど、あなたのデータを持っていたら

おかげ レオ

0

あなたがデータソースを定義した後は、クエリを追加することができ、これは関連

related.query({ 
     sort: { field: "Sort", dir: "asc"}, 
     group: { field: "CategoryName" }, 
     pageSize: 50 
    }); 

2

剣道のグループ分けは、与えられたことにより、アレイ内のすべての要素をソートし、データソースの名前で動作しているようですフィールド(たとえば、fooBar)を入力し、ソートされた要素を繰り返します。擬似コードで簡単に言えば、で:ソートされたアレイはグループ化を行うために必要とされているので

if (element[i].fooBar!= element[i-1].fooBar) { 
    StartNewGroup(element[i]); 
} else { 
    AddToLastGroup(element[i]); 
} 

、ソートを変更することが難しいです。ページの読み込み後いくつかの時点で

function overrideKendoGroupBy() { 
    var origFunc = kendo.data.Query.prototype.groupBy; 
    kendo.data.Query.prototype.groupBy = function (descriptor) { 
     var q = origFunc.call(this, descriptor); 

     var data = SortYourData(q.data, descriptor.dir); 

     return new kendo.data.Query(data); 
    }; 
} 

コールoverrideKendoGroupBy():私は、しかし、私が好きな私は、グループ化された結果をソートすることを可能にする内部groupBy()機能を無効にするためにコードを作成しました。今度は、q.dataがグループの配列で、descriptor.dir"asc"または"desc"の場合、SortYourData()関数を実装するだけです。 q.data[n]にはitemsの配列があり、元のデータソースの要素が含まれており、n番目のグループに含まれています。

注:このソリューションは、ページングを使用していない場合にのみ機能します。グループ化が適用される前にページが分割されるため、データが複数のページにまたがっている場合はすべてのベットがオフになります。

0

AddDescendingAddAscendingを試してみてください、ここでは、このための簡単な回避策です

@(Html.Kendo().Chart<T>() 
[... other code ...] 
.DataSource(ds => ds 
    .Read(read => read.Action("action", "controller")) 
    .Group(g => g.AddDescending(model=> model.property)) // <-- subtle difference here! 
) 
[... other code ...] 
) 

http://www.telerik.com/forums/stacked-chart-legend-order

0

下の例を参照してください。かなりしかし十分に簡単ではない...

だけグループ2上記のサンプルコードで

[{ 
     'Value': 1, 
     'Description': 'Description 1', 
     'Grouping': 'Group 1' 
    }, 
    { 
     'Value': 2, 
     'Description': 'Description 2', 
     'Grouping': ' Group 2' 
    }, 
    { 
     'Value': 3, 
     'Description': 'Description 3', 
     'Grouping': 'Group 3' 
    }] 

をソートすることが望ま達成するために、テキストの前にスペースを追加するには、グループ1の前に表示されます先頭のスペースのために

関連する問題