0

私のグリッドは次のとおりです。

@(Html.Kendo().Grid<Stuff>()
.Name("Grid")
    .DataSource(source => source.Ajax().Events(events=>events.Error("onError"))
    .Events(events=>events.RequestEnd("onRequestEnd"))
    .Model(model =>
        {
            model.Field(p => p.PurchaseQuantity).Editable(false);
            model.Field(p => p.PurchasePrice).Editable(false);
        })
    .Read("GetData", "Data"))
.Columns(columns =>
    {
        columns.Bound(o => o.PurchaseQuantity).Width(100);
        columns.Bound(o => o.PurchasePrice).Format("{0:C}").Width(100);

    })
.Sortable()
.Pageable(page=> page.PageSizes(new int[] { 10, 20, 50, 100 }).Refresh(true))
.Filterable(filterable => filterable.Extra(false))
.Events(boo=>boo.DataBound("onTest"))
.HtmlAttributes(new { style = "width:850px" }) 

)

データの読み込みに使用される JavaScript は次のとおりです。

<script type="text/javascript">
var storage = window.localStorage;
var storageLoaded = false;

function onError() {
    $("#Grid").data("kendoGrid").dataSource.cancelChanges();
}
function onTest() {
    if (!storageLoaded) {
        console.log('loading size from storage ' + storage.pageSize);
        storageLoaded = true;
        console.log('marked storage loaded');
        $("#Grid").data("kendoGrid").dataSource.pageSize(storage.PageSize);
        console.log('set pagesize from storage ' + storage.pageSize);
        var pagesize = $("#Grid").data("kendoGrid").dataSource.pageSize();
        console.log('page size is ' + pagesize);
    }
}

function onRequestEnd(e) {
    if (storageLoaded) {
        var pagesize = $("#Grid").data("kendoGrid").dataSource.pageSize();
        storage.pageSize = pagesize;
        console.log('setting size to storage ' + storage.pageSize);
    }
}


firebug コンソールには次のように表示されます。

ストレージからの読み込みサイズ 50 / マークされたストレージの読み込み / ストレージからのページサイズの設定 50 / ページサイズは 10

質問: 設定後にページサイズが保存されないのはなぜですか? これを達成するためのより良い方法はありますか?requestEnd を使用する代わりに、ページサイズ セレクターにアタッチする方法はありますか?

4

1 に答える 1

0

解決策を見つけました。グリッドを作る.AutoBind(false)

それから

$(document).ready(function () {
    storageLoaded = true;
    $("#Grid").data("kendoGrid").dataSource._pageSize = storage.pageSize;
    $("#Grid").data("kendoGrid").dataSource.read();
});

現在、これは将来の任意の時点で壊れる可能性のあるデータソース内の _ 変数を使用していますが、今のところ機能します。

私はデータバインドされたイベントを完全に削除しました。Telerik の友人が解決策を得るのに最も役立ちました。

将来的には次のようなものになることを願っています。

.Pageable(page=> page.PageSizes(true).Refresh(true).Sticky("gridPageSizeDefault")

を使用して値をhtml5ローカルストレージに保存しますgridPageSizeDefaultkey

于 2013-08-30T21:21:28.377 に答える