2013-05-26 4 views
8

グループ化するとき、ng-gridは、見た目と動作が通常の行とは異なるグループ行を作成します。特に、グループ行は通常の列を表示せず、aggregateTemplateによって定義された単一のマージされた行を表示します。私がしようとしているのは、集計された列データを含むようにグループ行をカスタマイズすることです。例:角度のあるUIグリッド - 集計行の振る舞いをカスタマイズする方法

カラム:
NAME |値

データ:
name1 | 5
name1 | 5
name2 | NAMEでグループ化されたときにグリッドが表示された1


- NAME1 | 10(これは最初のグループ行が展開されています)
- name1 | 5(これらは実際のデータ行です)
- name1 | 5(これらは実際のデータ行です)
- name2 | 1(これは2番目のグループ行が折りたたまれています)

グループ行は両方の列を表示し、そのVALUEは子の合計と等しくなります。
msエクセルのピボットテーブルに精通しているなら、それはまさに私がエミュレートしようとしているグループタイプの機能です。

スタックオーバーフロー(How to set aggregation with grouping in ng-grid)の類似した質問は、子集計計算を行う方法の例を示していますが、別の列を持つ通常の行のように出力を表示するng-gridを取得する方法に固執しています。 NGグリッドコードを見ると、簡単な作業のようには見えません。誰もがこれにいくつかの経験がありますか?
ありがとうございます!

答えて

3

それは古いquestiotnですが、私は正確に同じ問題を抱えていたので、私はここに私の解決策を与える:

私は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, 
       ... 

(私はちょうど値を、minまたはmaxを、例えば最初の行の値をコピーし、加算しています列定義でパラメータ化することができる)集計値を計算しますあなたが与えたリンクに触発された "scope.aggFc"関数(How to set aggregation with grouping in ng-grid

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) 

私は両方のフッタに同じ機能を使用します(コーヒースクリプトと仮定アンダースコア) 注(テーブル全体の合計)とアグロウズ。フッターの場合、行は渡されないので、事前に計算された合計が戻されます。 行が渡された場合、それは集約であるとみなされ、その子は列に対して合計されます。

関連する問題