Как получить пользовательские сводные итоги в нижнем колонтитуле сетки - PullRequest
0 голосов
/ 24 апреля 2018

Есть ли способ получить пользовательский итог в UI-Grid?

Например, у меня есть следующее Plunkr

Я хотел бы добавить толькостроки с именами Терри Клэя и Нивеса Мака и отображают это как общее.IE: Я бы хотел получить сумму определенного количества строк .Это выполнимо?Я искал способ сделать это и получил customTreeAggregationFn и customTreeAggregationFinalizerFn, как показано в plunkr.Однако я не уверен, как получить доступ к значениям в этих конкретных строках, чтобы добавить их и отобразить как часть нижнего колонтитула.

Вот код в Plunkr

$scope.gridOptions = {
    showGridFooter: true,
    showColumnFooter: true,
    enableFiltering: true,
    columnDefs: [
        { field: 'name', width: '13%' },
        { field: 'address.street',aggregationType: uiGridConstants.aggregationTypes.sum, width: '13%' },
        { field: 'age', aggregationType: uiGridConstants.aggregationTypes.avg, aggregationHideLabel: true, width: '13%' },
        { name: 'ageMin', field: 'age', aggregationType: uiGridConstants.aggregationTypes.min, width: '13%', displayName: 'Age for min' },
        { name: 'ageMax', field: 'age', aggregationType: uiGridConstants.aggregationTypes.max, width: '13%', displayName: 'Age for max' },
        { name: 'customCellTemplate', field: 'age', width: '14%', 
          customTreeAggregationFn : function( aggregation, fieldValue, numValue, row ) {
          if(row.entity.name.value === 'Terry Clay' || row.entity.name.value === 'Nieves Mack'){
           aggregation.value += row.entity.age;
          }
          },
          customTreeAggregationFinalizerFn: function( aggregation ) {
           aggregation.rendered = aggregation.value;
          }
        },
        { name: 'registered', field: 'registered', width: '20%', cellFilter: 'date', footerCellFilter: 'date', aggregationType: uiGridConstants.aggregationTypes.max }
    ],
    data: data,
    onRegisterApi: function(gridApi) {
            $scope.gridApi = gridApi;
    }
};

Пожалуйстапомогите, у меня была куча проблем с UI Grid, и это отсутствие поддержки, так что, надеюсь, это не так.

1 Ответ

0 голосов
/ 25 апреля 2018

Мне удалось понять это.Чтобы сложить определенные строки, я написал функцию, которая ее возвращает. Вот plunkr .

Вот код к нему.

$scope.gridOptions = {
    showGridFooter: true,
    showColumnFooter: true,
    enableFiltering: true,
    columnDefs: [
        { field: 'name', width: '13%' },
        { field: 'address.street',aggregationType: uiGridConstants.aggregationTypes.sum, width: '13%' },
        { field: 'age', aggregationType: uiGridConstants.aggregationTypes.avg, aggregationHideLabel: true, width: '13%' },
        { name: 'ageMin', field: 'age', aggregationType: uiGridConstants.aggregationTypes.min, width: '13%', displayName: 'Age for min' },
        { name: 'ageMax', field: 'age', aggregationType: uiGridConstants.aggregationTypes.max, width: '13%', displayName: 'Age for max' },
        { name: 'customCellTemplate', field: 'age', width: '14%', 
          aggregationType: function ()
          {
            if(!$scope.gridApi)
                return 0;
            var sum = 0;

            //if it is filtered/sorted you want the filtered/sorted rows only)
            var visibleRows = $scope.gridApi.core.getVisibleRows($scope.gridApi.grid);

            for (var i = 0; i < visibleRows.length; i++) {
              if(visibleRows[i].entity.name === 'Sandoval Mclean' || visibleRows[i].entity.name === 'Nieves Mack') {

                  //you have to parse just in case the data is in string otherwise it will concatenate
                  sum += parseInt(visibleRows[i].entity.age);
              }
            }
            return sum;
          },
        },
        { name: 'registered', field: 'registered', width: '20%', cellFilter: 'date', footerCellFilter: 'date', aggregationType: uiGridConstants.aggregationTypes.max }
    ],
    data: data,
    onRegisterApi: function(gridApi) {
            $scope.gridApi = gridApi;
    }
};

Функция aggregationType - это магия, когда я добавляю только строки, имеющие определенныйимена.

...