如何获取Kendo-UI网格列的列总数(已计算)

时间:2014-09-14 20:52:17

标签: angularjs kendo-ui kendo-grid

我有一个订单行网格,其中包含一个Total列,使用模型定义中的total函数计算(Qty x Price):

schema: {
    model: {
        id: "id",
        fields: {
            id: { type: "string" },
            orderId: { type: "number" },
            lineNo: { type: "number" },
            itemNo: { type: "string" },
            ...
            price: { type: "number" },
            qty: { type: "number" },
            comment: { type: "string" },
        },
        total: function () {
            return (this.get("qty") * this.get("price")).toFixed(2);
        }
    }
}

注意:我在模型定义中使用总函数而不是常规kendo模板的原因"#= Qty * price#"是我需要自定义编辑表单的总函数(其中有一个总字段需要在数量或价格更改时动态更新)。

列定义如下:

{
    field: "total",
    title: "Total",
    width: 60,
    template: "#= total() #",
}

这是一个掠夺者:http://plnkr.co/edit/YHiupWy49mvk4kZAqJTA?p=preview

我需要在网格之外有一个字段,它总是反映网格的总计(=总列数的总和),我已经在网格中放置了一个占位符,总计;这是总数应该显示的地方。

我怎么能这样做,最好是以AngularJS的方式?

编辑2014年9月15日,根据接受的答案,这是我使用的解决方案:

dataBound: function(e) {
   var gridData = e.sender.dataSource.data();

   $timeout(function() {
      $scope.ticket.subTotal = 0;
      for (var i = 0; i < gridData.length; i++) {
         $scope.ticket.subTotal += gridData[i].qty*gridData[i].price;
      }
   });
}

请注意,我使用$ timeout,因为添加行是以Angular-aware方式完成的,而常规编辑则不是。通过使用$ timeout,$ apply将始终以安全的方式自动应用。

HTML:

<b>Grand Total: </b> <input type="text" ng-model="ticket.subTotal" />

更新了plunker:http://plnkr.co/edit/GJx1mxVqd4vvK0IlfpKw?p=preview

1 个答案:

答案 0 :(得分:1)

您可以使用网格的数据绑定功能,如下所示

var Grandtotal=0;
$("#grid").kendoGrid({
..
..
dataBound: function (e) {
                     var grid = $("#grid").data("kendoGrid");
                     var gridData = grid.dataSource.view();
                     for (var i = 0; i < gridData.length; i++) {
                         (
                          Grandtotal+=gridData[i].qty*gridData[i].price;
                         }
                     }
                 }
)}

我希望这可以帮到你