0

グリッドデータを使用してレポートを作成しているので、MVCで自分のメソッドから剣道グリッドハンドラーを呼び出そうとしているのとまったく同じ外観を盗むことができます。

グリッドを更新するときに剣道がこれを送信することを観察しました:

sort:dueDate-desc
page:1
pageSize:20
group:
filter:

これまでのところ、これをフォーマットするために、フォームデータをループして手動で作成しました。たとえば、並べ替えフィールドの場合です。

     var sortSet = grid.dataSource.sort();
     var sortString = '&sort=';
     for (var i = 0; i < sortSet.length; i++) {
        sortString = sortString + sortSet[i].field + '-' + sortSet[i].dir + '~';
     }

剣道にこれをさせる方法はありますか?すでに文字列を保存している場所は?

ありがとう

4

2 に答える 2

0

このアプローチを使用して、グリッドデータのエクスポートを参照するコードライブラリからリンクを生成できます。これがPDF用です。

基本的に、 dataBoundイベントを使用してリンクのURLを更新するマジックコードは次のとおりです。

//initial URL of the link is generated with this helper

Url.Action("Export", "Home", new { page = 1, pageSize = "~", filter = "~", sort = "~" })


<script type="text/javascript">
    function onDataBound(e) {
        var grid = $('#Grid').data('kendoGrid');

        // ask the parameterMap to create the request object for you
        var requestObject = (new kendo.data.transports["aspnetmvc-server"]({ prefix: "" }))
        .options.parameterMap({
            page: grid.dataSource.page(),
            sort: grid.dataSource.sort(),
            filter: grid.dataSource.filter()
        });

        // Get the export link as jQuery object
        var $exportLink = $('#export');

        // Get its 'href' attribute - the URL where it would navigate to
        var href = $exportLink.attr('href');

        // Update the 'page' parameter with the grid's current page
        href = href.replace(/page=([^&]*)/, 'page=' + requestObject.page || '~');

        // Update the 'sort' parameter with the grid's current sort descriptor
        href = href.replace(/sort=([^&]*)/, 'sort=' + requestObject.sort || '~');

        // Update the 'pageSize' parameter with the grid's current pageSize
        href = href.replace(/pageSize=([^&]*)/, 'pageSize=' + grid.dataSource._pageSize);

        //update filter descriptor with the filters applied

        href = href.replace(/filter=([^&]*)/, 'filter=' + (requestObject.filter || '~'));

        // Update the 'href' attribute
        $exportLink.attr('href', href);
    }
</script>

これがあなたが探しているものであることを願っています。

于 2013-01-10T16:26:45.657 に答える
0

dataSourceオプションserverAggregates、、、および/またはを定義するとserverFiltering、KendoUIはそれらのパラメーターをサーバーに送信して、実行する必要のあることとそれに必要なさまざまなパラメーターをサーバーに許可します。serverGroupingserverPagingserverSorting

そのような場合は、 KendoUI内部形式からサーバー形式にパラメーターを変換または追加できるように定義transport.parameterMapまたは追加できるため、ここでリクエストをインターセプトし、最後のリクエストのパラメーターリストを保存して後で使用できます。transport.read.data

オプション1

var savedParamAsJSON = undefined;
var savedParamAsStringifiedJSON = undefined;
var savedParamAsUriEncoded = undefined;
var savedParamAsUriDecoded = undefined;

var dataSource = new kendo.data.DataSource({
    serverPaging   : true,
    serverSorting  : true,
    serverFiltering: true,
    transport      : {
        read        : {
            url : "data.json"
        },
        parameterMap: function (data, type) {
            if (type === "read") {
                savedParamAsJSON = data;
                savedParamAsStringifiedJSON = JSON.stringify(data);
                savedParamAsUriEncoded = encodeURIComponent(jQuery.param(data));
                savedParamAsUriDecoded = jQuery.param(data);

                // Actual update the link
                $("#exportLink").attr("href", "http://www.onabai.com?" + savedParamAsUriDecoded);
            }
        }
    },
    schema         : {
        model: {
            id    : "ID",
            fields: {
                ID: { type: "number"}
            }
        }
    },
    pageSize       : 8

});

私はparameterMapそれを4つの異なる形式で保存します:

  1. savedParamAsJSONsavedParamAsStringifiedJSONJSONオブジェクトまたはその文字列表現(例:)として保存さます{"take":8,"skip":0,"page":1,"pageSize":8}
  2. InsavedParamAsUriEncodedは文字列として保存されますが、URIエンコードされます(例take%3D8%26skip%3D0%26page%3D1%26pageSize%3D8:)
  3. InsavedParamAsUriDecodedは文字列として保存されますが、URIエンコードされません(例:) take=8&skip=0&page=1&pageSize=8

オプション2:transport.read.dataデータを保存するための関数を定義する場合にも実行できます。

transport      : {
    read        : {
        url : "data.json",
        data: function (data) {
            savedParamAsJSON = data;
            savedParamAsStringifiedJSON = JSON.stringify(data);
            savedParamAsUriEncoded = encodeURIComponent(jQuery.param(data));
            savedParamAsUriDecoded = jQuery.param(data);

            // Actual update the link
            $("#exportLink").attr("href", "http://www.onabai.com?" + savedParamAsUriDecoded);
        }
    }
},
于 2013-01-11T11:51:49.953 に答える