2012-12-13 10 views
11

KendoUI DataSourceのソートパラメータをプログラムで設定してから、データを読み取って2番目のサーバーの読み取りを回避することはできますか? スコープは、特定のユーザー対話の既定の並べ替えを設定しています。どうやって?KendoUI:プログラムでグリッドソートを設定する

ここでは、答えがポイントに達していない(または、私は物事の仕組みを理解していない)ので、私がしようとしているものの例です。

私は最初のソートで剣道DataSourceを定義します。

var datasource = new kendo.data.DataSource({ 
    parameterMap: function (inputParams, operation) { 
     return JSON.stringify(inputParams) 
    }, 
    // default sort 
    sort: [ 
     {field: "field_1", dir: "asc"}, 
     {field: "field_2", dir: "asc"} 
    ] 
}); 

このデータソースは、剣道のグリッドにバインドされます。

var grid = $("element").kendoGrid({ 
    dataSource: datasource 
}); 

それから私は、上の「読み」を呼び出すボタンがありますデータソースの最初のページをグリッドに表示します。

$("#btn").bind("click", function(e) { 
    datasource.page(1); 
}); 

この方法では、ユーザーは "field_1"と "field_2"で順序付けられたデータを取得し、グリッドは列ヘッダーでこの並べ替えを表示します。ユーザーは、列見出しをクリックすることで、データの順序を変更することができます。

私がしたいのは、DataSource宣言で定義されているように、デフォルトのソートを最初のものにリセットし、再び列ヘッダーに表示し、新しいデータソースを再度作成しないことです。

ような何か:

$("#btn").bind("click", function(e) { 
    datasource.sort = [ 
     {field: "field_1", dir: "asc"}, 
     {field: "field_2", dir: "asc"} 
    ]; 
    datasource.page(1); 
}); 

提供ソリューションがポイントに到達していないようだ(と私はそう簡単ではありませんように思わ合法的な質問のための評判ポイントを失うこととすべき午前、なぜまだ私は理解していませんフレームワークによって対処される)。

私は間違っていることを示してください(私は評判を失うことについて心配していません - 問題の解決方法を理解したいと思います)。ありがとうございました!

+0

私はそれが可能ではないと仮定すべきです。 –

+0

これは、$ grid.dataSource.sort( {field: "A"、dir: "desc"}、 {field: "B"、dir: "asc"}、 {field: "C"、dir: "asc"}、 {field: "D"、dir: "desc"} );私が見る唯一の問題は、ソートインジケータがすべての列に表示されないということです。 – topwik

答えて

2

はい。 sortの設定で可能です。

+1

実際には、ソートはサーバーへの2回目の呼び出しを呼び出します。データを読み込む前にソートを変更して、デフォルトのソートを変更したいと思います。 –

+0

一言...本当に試しましたか?ソート設定オプションの代わりにsortメソッドを使用している可能性があります。 –

+0

私は両方を試しました。例を教えてください。私が何をしようとしているのか理解するために、他の答えに残したコメントを参照してください。 –

1

最初にデータを読み取る前にソートを設定したいですか?あなたがあなたのUIコントロールでautobind:falseを持っていることを確認してから、データソースのソートプロパティを設定し、ソートされたデータを取得する準備ができたらdatasource.read()を呼び出します。しかし、あなたはあなたから必要な入力を取得するときにデータソースを注入し、その後、最初はnullにDataSourceを設定する必要が一言で言えばhttp://jsfiddle.net/MechStar/c2S5d/

を:ここで

+0

しかし、データソース宣言の外で、読み込み呼び出しの直前にソートを設定したい場合は、条件の変更をソートするか、またはデフォルト値にリセットするだけですか?それを実現する唯一の方法は、既存のデータソースを破棄し、新しいsortパラメータを使用して新しいデータソースを作成することです。 –

+0

これは可能です。 var myDataSource = new kendo.data.DataSource({}); myDataSource.sort = [{field: "myFieldName"、dir: "asc"}、{field: "myOtherField"、dir: "desc"}];次に、myDataSource.read()を呼び出します。 –

28
var kendoGrid = $("#grid").data('kendoGrid'); 
var dsSort = []; 
dsSort.push({ field: "fieldName1", dir: "asc" }); 
dsSort.push({ field: "fieldName2", dir: "desc" }); 
kendoGrid.dataSource.sort(dsSort); 
+2

これは答えとしてマークされるべきだと思います。 –

+0

実際のgrid.dataSource.data()ソートを更新することは可能ですか?ただの見方ではない – agDev

2

は、あなたが求めている正確に何のためにjsfiddleですユーザー:

myKendoGrid.data( "kendoGrid")。setDataSource(getKendoDataSource( "ShipName"、 "asc"));

var getKendoDataSource = function (sidx, sord) { 
    return new kendo.data.DataSource({ 
    type: "odata", 
    transport: { 
     read: "http://demos.kendoui.com/service/Northwind.svc/Orders" 
    }, 
    pageSize: 10, 
    serverPaging: true, 
    serverSorting: true, 
    sort: { 
     field: sidx ? sidx : "", 
     dir: sord ? sord : "" 
    } 
    }); 
}; 
var myKendoGrid = $("#grid").kendoGrid({ 
    columns: [ 
    { field: "OrderID" }, 
    { field: "ShipName" }, 
    { field: "ShipCity" } 
    ], 
    dataSource: null, 
    pageable: { 
    pageSizes: [10, 20, 50, 100, 200] 
    }, 
    resizable: true, 
    scrollable: false, 
    sortable: { 
    allowUnsort: false 
    } 
}); 
$("#link").click(function() { 
    myKendoGrid.data("kendoGrid") 
    .setDataSource(getKendoDataSource("ShipName", "asc")); 
}); 
0

私はあなたが達成しようとしていることを知っています。私はユーザーソートとフィルタリング(私の場合はクライアント側)を保存しており、グリッド関数getOptions/setOptionsを使用することができないため、同じことをしなければなりませんでした。 あなたは自動バインドを設定しても:falseに設定した場合

http://docs.telerik.com/kendo-ui/api/javascript/ui/grid#configuration-autoBind

は、ウィジェットがデータにバインドしません:あなたは自動バインドの定義を参照してください場合は、期待どおりこれが仕事に行くされていない偽初期化中のソース。この場合、データ・ソースの変更イベントが発生するとデータ・バインディングが発生します。デフォルトでは、ウィジェットは設定で指定されたデータソースにバインドされます。あなたはdataSource.sort()を行うと

、これは変更イベントを発生させ、その後、は(あなたが第2のサーバ読書を持っている理由です)暗黙的にデータソースに行われているお読みください。

したがって、必要な並べ替えオプションを使用して新しいデータソースを作成し、次にdataSource.read()を明示的に呼び出す必要があります。例えば

(設定を繰り返さないためにあなたのデフォルトのオプションを拡張することができます):

var options = $.extend({}, dataSourceOptions); 
options.sort = [ 
     {field: "field_1", dir: "asc"}, 
     {field: "field_2", dir: "asc"} 
    ]; 
var dataSource = new kendo.data.DataSource(options); 
grid.setDataSource(dataSource); 
grid.dataSource.read(); 

・ホープこのヘルプ。 よろしく!

関連する問題