2016-01-04 1 views
0

У меня есть uigrid, который содержит большое количество определений столбцов, которые изначально не заполнены данными, потому что набор данных будет слишком большим. Вместо этого я получаю запрашиваемые данные столбца при изменении видимости столбца.Углеродный экспорт uigrid выбрал пустые csv

Это вызывает проблему со встроенным экспортером csv. Когда кто-то выбирает «Экспортировать все данные как csv», они получают многочисленные пустые столбцы.

Так что я сделал свою собственную реализацию следующим образом:

$interval(function() { 
     gridApi.core.addToGridMenu(gridApi.grid, [{ 
     title: 'Export All to CSV', 
     order: 1, 
     action: function ($event) { 
      var myElement = angular.element(document.querySelectorAll(".custom-csv-link-location")); 
      $scope.gridApi.exporter.csvExport(uiGridExporterConstants.ALL, uiGridExporterConstants.VISIBLE, myElement); 
     } 
     }]); 
     gridApi.core.addToGridMenu(gridApi.grid, [{ 
     title: 'Export Selected to CSV', 
     order: 2, 
     action: function ($event) { 
      if(gridApi.grid.selection.selectedCount > 0){ 
      var myElement = angular.element(document.querySelectorAll(".custom-csv-link-location")); 
      $scope.gridApi.exporter.csvExport(uiGridExporterConstants.SELECTED, uiGridExporterConstants.VISIBLE, myElement); 
      } 
     } 
     }]); 
     gridApi.core.addToGridMenu(gridApi.grid, [{ 
     title: 'Export Visible to CSV', 
     order: 3, 
     action: function ($event) { 
      var myElement = angular.element(document.querySelectorAll(".custom-csv-link-location")); 
      $scope.gridApi.exporter.csvExport(uiGridExporterConstants.VISIBLE, uiGridExporterConstants.VISIBLE, myElement); 
     } 
     }]); 
    }, 0, 1); 

Экспорт Все в CSV и экспорта Видна CSV работы, как и ожидалось, но Export Selected просто создает CSV файл только заголовки, без каких-либо данных.

Я знаю, что сетка знает о выборе следующее возвращает элементы, которые выбираются в консоли:

 gridApi.core.addToGridMenu(gridApi.grid, [{ 
     title: 'Export Selected to CSV', 
     order: 2, 
     action: function ($event) { 
      if(gridApi.grid.selection.selectedCount > 0){ 
      var myElement = angular.element(document.querySelectorAll(".custom-csv-link-location")); 
      $scope.gridApi.exporter.csvExport(uiGridExporterConstants.SELECTED, uiGridExporterConstants.VISIBLE, myElement); 
      console.log(gridApi.selection.getSelectedRows()); 
      gridApi.selection.getSelectedRows().forEach(function (entry) { 
       console.log(entry); 
       for (var e in entry){ 
       console.log(entry[e]); 
       } 
      }); 
      } 
     } 
     }]); 

Я полагаю, я мог бы использовать данные, возвращаемые getSelectedRows, чтобы сделать свой собственный CSV, но Я бы не. Является ли uiGridExporterConstants.SELECTED сломанным?

ответ

0

I «фиксированным» это с помощью открытого API и некоторые из моего собственного хакерства:

    gridApi.core.addToGridMenu(gridApi.grid, [{ 
        title: 'Export Selected to CSV', 
        order: 2, 
        action: function ($event) { 
         if(gridApi.grid.selection.selectedCount > 0){ 
          var uiExporter = uiGridExporterService; 
          var grid = $scope.gridApi.grid; 
          uiExporter.loadAllDataIfNeeded(grid, uiGridExporterConstants.ALL, uiGridExporterConstants.VISIBLE).then(function() { 
           var exportColumnHeaders = uiExporter.getColumnHeaders(grid, uiGridExporterConstants.VISIBLE); 
           var selectionData = []; 
           gridApi.selection.getSelectedRows().forEach(function (entry) { 
            var innerData = []; 
            for (var e in entry){ 
             if (e !== '$$hashKey') { 
              var selectObj = {value:entry[e]}; 
              innerData.push(selectObj); 
             } 
            } 
            selectionData.push(innerData); 
           }); 
           var csvContent = uiExporter.formatAsCsv(exportColumnHeaders, selectionData, grid.options.exporterCsvColumnSeparator); 
           uiExporter.downloadFile($scope.gridOptions.exporterCsvFilename, csvContent, grid.options.exporterOlderExcelCompatibility); 
          }); 
         } 
        } 
       }]); 

Не хорошенькое решение, но это работает.

 Смежные вопросы

  • Нет связанных вопросов^_^