1

ajax 呼び出しの結果を使用して、どの Kendo Grid に入力するかを決定できるようにしたいと考えています。配列に項目が 1 つしかない場合は、グリッドにデータを入力します。それ以外の場合は、複数の項目用に別のグリッドを作成します。

私のjQuery

    $.ajax({
        type: "POST",
        dataType: "json",
        url: 'Item/GetItems/',
        data: { number: number },
        success: function (data) {

            if (data.length == 1) {
                var sGrid = $("#SingleGrid").data("kendoGrid").dataSource.data(data);

                //I´ve also tried this
                //sGrid.refresh();
            }
            else {
                var mGrid = $("#MultipleGrid").data("kendoGrid").dataSource.data(data);

                //I´ve also tried this
                //mGrid .refresh();
            }
        },
        error: function () {
        }
    });

私のコントローラーアクション

    public ActionResult GetItems([DataSourceRequest] DataSourceRequest request, string number)
    {
        var items = _idg.GetItems(number);
        return Json(items.ToDataSourceResult(request, ModelState));
    }

Firebug を監視してきましたが、エラーは表示されません。グリッドの 1 つにデータを入力することを決定して、サーバーへの 2 回目の呼び出しを防止しようとしています。このクライアント側のように dataSource を強制的に更新する方法はありますか? (2回目にサーバーを呼び出す dataSource で read 関数を呼び出さずに)

###### 編集済み ########

function TestGrid() {
    var dataSource = new kendo.data.DataSource({
        transport: {
            read: {
                type: "POST",
                dataType: "json",
                url: 'Item/GetItems/'
            }
        },
        schema: {
            data: function (response) {
                // Here the Total is always correct
                return response.Total;
            }
        }
    });

    dataSource.fetch(function () {
        var kendoGrid;
        var data = this.data();
        //Here the data does not include my Total
        alert(data);
        if (data.length == 1) {
            kendoGrid = $("#SingleGrid").data("kendoGrid");
        } else {
            kendoGrid = $("#MultipleGrid").data("kendoGrid");
        }
        kendoGrid.setDataSource(dataSource);
        kendoGrid.refresh();
    });
}

上記の例から、this.data() からの合計数に到達できないようです。Firebug でデバッグすると、合計数が常に正しいことがわかります。何か案は?

4

2 に答える 2

5

剣道データソースの新しいインスタンスを作成し、データをロードしてから、結果に基づいてグリッドのデータソースを設定できます。多分このようなもの:

var dataSource = new kendo.data.DataSource({
  transport: {
    read:  {
      type: "POST",
      dataType: "json",
      url: 'Item/GetItems/',
      data: { number: number },
    }
  }
});

次に、サーバーからデータをフェッチし、結果を処理します。

dataSource.fetch(function() {
  var data = this.data();
  var kendoGrid;
  if (data.length == 1) {
    kendoGrid = $("#SingleGrid").data("kendoGrid");
  } else {
    kendoGrid = $("#MultipleGrid").data("kendoGrid");
  }
  // Replace the grids data source with our new populated data source
  kendoGrid.setDataSource(dataSource);
  kendoGrid.refresh();
});
于 2013-06-25T12:30:20.790 に答える