8

分组时,ng-grid 创建组行,其外观和行为与常规行不同。特别是,组行不显示常规列,而是显示由 aggregateTemplate 定义的单个合并行。我正在尝试做的是自定义组行以包含聚合列数据。例如:

列:
名称 | 值

数据:
名称1 | 5
姓名1 | 5
姓名2 | 1

按 NAME 分组时显示的网格:
- name1 | 10(这是展开的第一组行)
-- name1 | 5 (这些是实际的数据行)
-- name1 | 5(这些是实际的数据行)
- name2 | 1(这是折叠的第二组行)

请注意,组行显示两列,它们的 VALUE 等于它们的子项的总和。
如果您熟悉 ms excel 数据透视表,那正是我试图模拟的分组类型功能。

这里有一个关于堆栈溢出的类似问题(如何在 ng-grid 中使用分组设置聚合) 显示了如何进行子聚合计算的示例,但我一直坚持如何让 ng-grid 像带有单独列的常规行一样显示输出。查看 ng-grid 代码看起来并不容易。有人有这方面的经验吗?
谢谢!

4

2 回答 2

3

这是一个老问题,但我遇到了完全相同的问题,所以我在这里给出我的解决方案:

我已经在aggregateTemplate中复制了单元格模板,然后对其进行了调整以显示箭头,并调用了一个函数来计算聚合值(例如,我只是复制第一行的值,对值的求和、最小值或最大值可以在列定义)

    groupTemplate=
        '<div ng-style="{\'top\':row.offsetTop+\'px\'}" class="{{row.aggClass()}}"></div>'
        +'<div ng-click="row.toggleExpand()" ng-style="{ \'cursor\': row.cursor ,\'top\':row.offsetTop+\'px\'}" ng-repeat="col in renderedColumns" ng-class="col.colIndex()" class="ngCell ngCellGroup {{col.cellClass}}">'
                +'<div class="ngVerticalBar" ng-style="{height: rowHeight}" ng-class="{ ngVerticalBarVisible: !$last }">&nbsp;</div>'
                +'<div >{{aggFc(row,col) }}</div>'

        +'</div>';

    $scope.aggFc=function(rowAgg,col){
        var row=rowAgg.children[0];
        if(row.entity[col.field] && col.cellFilter){
            console.log("'"+row.entity[col.field]+"'  |" +col.cellFilter);
            return $scope.$eval("'"+row.entity[col.field]+"'  |" +col.cellFilter);
        }
        return row.entity[col.field]
    };

     $scope.yourGrid =
            {
                data: '...',
                enableCellSelection: false,
                enableRowSelection: true,
                aggregateTemplate:groupTemplate,
                ...

我认为可以通过调整受您提供的链接启发的“$scope.aggFc”函数来使用此解决方案(如何在 ng-grid 中使用分组设置聚合

于 2013-11-21T11:17:02.000 回答
0

要获得总和,您可以将 aggFC 更改为:

$scope.get_total= (col,row) ->
    # used by the footer template to access column totals.
    return $scope.totals[col.field] if _.isUndefined(row)
    _.reduce(row.children, ((sum, child) -> sum + child.entity[col.field]), 0)

(假定咖啡脚本和下划线)请注意,我对页脚(整个表格的总数)和 aggrows 使用相同的函数。在页脚的情况下,没有传入任何行,因此会返回预先计算的总数。如果传递了一行,则假定它是一个聚合,并且它的子级为该列求和。

于 2013-11-22T00:58:57.053 回答