1

フッターに合計を表示する必要があるグリッドを作成していますが、組み込みの合計集計は私のニーズにはまったく合いません。

例として、私が販売している製品のリストを含むグリッドを構築しているとします。「割引対象」という欄もあります。商品の合計金額を表示したいのですが、割引対象商品のみです。

理想的には、以下のような関数を渡せるようにしたいのですが、Kendo グリッドがそれをサポートしているとは思いません。

function(seed, model){
  if(model.EligibleForDiscount === true){
      return seed.Price + model.Price;
  }

  return seed.Price;
}

また、グリッドの更新時に自動的に更新する必要があります。

これを行う唯一の方法は、グリッド上のイベントを手動で処理し、jQuery を使用してフッター テンプレートを更新することですか?

4

4 に答える 4

2

以下の例を試してください:

$("#SearchDetails").kendoGrid({
        scrollable: true,
        resizable: true,
        sortable: true,
        pageable: false,
        navigatable: true,
        filterable: false,
        groupable: true,
        selectable: "row",
        schema: {
            fields: {
                Duration: { type: "number" }
            }                      
        },
        columns: [
                { title: ' Name', field: 'CustName'},
                { title: ' Event Name', field: 'ServiceName'},
                { title: 'Resource Name', field: 'ResourceName', footerTemplate: '<span style=\'float:right;\'>Total</span>' },
                { title: 'Duration(Min)', field: 'Duration', template: '<span style=\'float:right;\'>#=Duration#</span>', aggregates: 'sum', footerTemplate: '<span id=\'footerPlaceholder\' style=\'float:right;font-weight: bold;\'>#=calc(sum)#</span>' },
                { title: 'Total Amount (' + currencySymbol + ')', field: 'TotalAmount', template: '<span style=\'float:right;\'>#=TotalAmount#</span>', aggregates: 'sum', footerTemplate: '<span style=\'float:right;font-weight: bold;\'>#=kendo.toString(sum,\'n\')#</span>' }
        ],
        dataSource: {
            data: viewModel.AppintDetails(),
            aggregate: [{ field: 'Duration', aggregate: 'sum', format: 'n' }, { field: 'TotalAmount', aggregate: 'sum', format: 'n' }]
        }
    });

その下に、html セクションに関数を作成します。

<script type="text/javascript">
    function calc(val) {
        var hour = Math.floor(val / 60);
        var min = val % 60;
        val = hour + ":" + min + " hrs";
        return val;
    }
</script>

期間の合計を適切な日付形式で表示するために使用しています。このコードは私のために機能します... グリッドの下 これを表示...詳細 ここに画像の説明を入力

于 2014-07-02T08:37:08.773 に答える
1

残念ながら、剣道DataSourceはカスタム集計関数を追加する方法を提供していませんが、おそらく次のfooterTemplateようなカスタム列を使用するだけでこれを達成できます:

var gridDataSource = new kendo.data.DataSource({...});

window.calculatePriceAggregate = function () {
    var data = gridDataSource.data();
    var total = 0;
    for(var i = 0; i < data.length; i++) {
        if (data[i].EligibleForDiscount === true) {
            total += data[i].Price;
        }
    }
    return total;
};

$("#grid").kendoGrid({
    data: gridDataSource,
    ...
    columns: [
        {
            field: 'Price',
            footerTemplate: '#=window.calculatePriceAggregate()#'
        }

    ]
});
于 2013-09-10T02:19:34.687 に答える