var app = angular.module('app', ['ngAnimate', 'ngTouch', 'ui.grid', 'ui.grid.grouping', 'ui.grid.pagination', 'ui.grid.moveColumns']);
app.controller('MainCtrl', ['$scope', '$http', '$interval', 'uiGridGroupingConstants', 'uiGridConstants', function ($scope, $http, $interval, uiGridGroupingConstants, uiGridConstants) {
$scope.initonload = function () {
$scope.gridOptions = {
enableFiltering: true,
enableGridMenu: true,
paginationPageSizes: [5, 10, 15],
paginationPageSize: 15,
treeRowHeaderAlwaysVisible: false,
headerTemplate: 'header-template.html',
category: [
{ name: 'machine', visible: true, showCatName: false },
{ name: 'dep', visible: true, showCatName: false },
{ name: 'div', visible: true, showCatName: false },
{ name: 'productive', visible: true, showCatName: true }
],
enableSorting: false,
multiSelect: true,
columnDefs: [
{ name: 'machine', width: '15%', category: "machine" },
{ name: 'dep', width: '10%', category: "dep" },
{ name: 'div', width: '10%', category: "div" },
{ name: 'util', width: '10%', category: "productive", treeAggregationType: uiGridGroupingConstants.aggregation.SUM },
{
name: 'prodcutive time', width: '25%', category: "productive", treeAggregationType: uiGridGroupingConstants.aggregation.AVG,
filters: [
{
condition: uiGridConstants.filter.GREATER_THAN,
placeholder: 'Greater than'
},
{
condition: uiGridConstants.filter.LESS_THAN,
placeholder: 'Less than'
}
]
},
{ name: 'non prodcutive time', width: '25%', category: "productive", treeAggregationType: uiGridGroupingConstants.aggregation.AVG }
],
onRegisterApi: function (gridApi) {
$scope.gridApi = gridApi;
}
};
}
$http.get('http://private-ba0530-machinejson.apiary-mock.com/questions')
.success(function (data) {
$scope.gridOptions.data = data;
console.log($scope.gridOptions.data);
});
$scope.changeGroupByMachines = function () {
//$scope.initonload();
$scope.gridApi.grouping.clearGrouping();
$scope.gridApi.grouping.groupColumn('machine');
}
$scope.changeGroupData10 = function () {
//$scope.initonload();
$scope.gridApi.grouping.clearGrouping();
$scope.gridApi.grouping.groupColumn('dep');
$scope.gridOptions.columnDefs[0].name = 'dep';
$scope.gridOptions.columnDefs[0].treeAggregationType = uiGridGroupingConstants.aggregation.avg;
}
$scope.changeGroupData0 = function () {
$scope.initonload();
$scope.gridApi.grouping.clearGrouping();
$scope.gridApi.grouping.groupColumn('dep');
$scope.gridOptions.columnDefs[1].visible = true;
$scope.gridOptions.columnDefs[0].treeAggregationType = uiGridGroupingConstants.aggregation.AVG;
}
$scope.changeGroupData = function () {
$scope.initonload();
$scope.gridApi.grouping.clearGrouping();
$scope.gridApi.grouping.groupColumn('dep');
$scope.gridApi.grouping.groupColumn('div');
$scope.gridOptions.columnDefs[1].visible = true;
$scope.gridOptions.columnDefs[2].visible = true;
}
$scope.hidefields = function () {
$scope.gridOptions.columnDefs[1].visible = false;
$scope.gridOptions.columnDefs[2].visible = false;
}
$scope.expandAll = function () {
$scope.gridApi.treeBase.expandAllRows();
};
$scope.toggleRow = function (rowNum) {
$scope.gridApi.treeBase.toggleRowTreeState($scope.gridApi.grid.renderContainers.body.visibleRowCache[rowNum]);
};
$scope.changeGrouping = function () {
$scope.gridApi.grouping.clearGrouping();
$scope.gridApi.grouping.groupColumn('age');
$scope.gridApi.grouping.aggregateColumn('state', uiGridGroupingConstants.aggregation.COUNT);
};
}])
.grid {
width: 1000px;
height: 750px;
}
.ui-grid-category {
text-align: center;border-right: 0px;box-shadow: -1px 1px #d4d4d4
}
<div role="rowgroup"
class="ui-grid-header">
<div class="ui-grid-top-panel">
<div class="ui-grid-header-viewport">
<div class="ui-grid-header-canvas">
<div class="ui-grid-header-cell-wrapper"
ng-style="colContainer.headerCellWrapperStyle()">
<div role="row"
class="ui-grid-header-cell-row">
<div class="ui-grid-header-cell ui-grid-clearfix ui-grid-category" ng-repeat="cat in grid.options.category"
ng-if="cat.visible &&
(colContainer.renderedColumns | filter:{ colDef:{category: cat.name} }).length > 0">
<span ng-if="cat.showCatName === true">
{{cat.name}}
</span>
<div class="ui-grid-header-cell ui-grid-clearfix"
ng-repeat="col in colContainer.renderedColumns | filter:{ colDef:{category: cat.name} }"
ui-grid-header-cell
col="col"
render-index="$index">
</div>
</div><!--!cat.visible && -->
<div class="ui-grid-header-cell ui-grid-clearfix" ng-if="col.colDef.category === undefined"
ng-repeat="col in colContainer.renderedColumns track by col.uid"
ui-grid-header-cell
col="col"
render-index="$index">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!doctype html>
<html ng-app="app">
<head>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular-touch.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular-animate.js"></script>
<script src="http://ui-grid.info/docs/grunt-scripts/csv.js"></script>
<script src="http://ui-grid.info/docs/grunt-scripts/pdfmake.js"></script>
<script src="http://ui-grid.info/docs/grunt-scripts/vfs_fonts.js"></script>
<script src="http://ui-grid.info/release/ui-grid.js"></script>
<link rel="stylesheet" href="http://ui-grid.info/release/ui-grid.css" type="text/css">
<link rel="stylesheet" href="main.css" type="text/css">
</head>
<body>
<div ng-controller="MainCtrl" ng-init="initonload()">
<!-- <button id="expandAll" type="button" class="btn btn-success" ng-click="expandAll()">Expand All</button>
<button id="toggleFirstRow" type="button" class="btn btn-success" ng-click="toggleRow(0)">Toggle First Row</button>-->
<button id="toggleSecondRow" type="button" class="btn btn-success" ng-click="changeGroupByMachines(1)">Group By Machines</button>
<button id="groupData0" type="button" class="btn btn-success" ng-click="changeGroupData0()">Grouping By Dep</button>
<button id="groupData" type="button" class="btn btn-success" ng-click="changeGroupData()">Grouping By Dep and Div </button>
<div id="grid1" ui-grid="gridOptions" ui-grid-grouping ui-grid-pagination ui-grid-move-columns ui-grid-pinning class="grid"></div>
</div>
<script src="app.js"></script>
</body>
</html>