2016-02-24 35 views
1

我有一个表UI电网完成,此表导出CSV有这样cellFilter定义列:从UI的网格单元格显示而不是源值

{ field: 'company', cellFilter: 'mapCompany:row.grid.appScope.companyCatalog' } 

我gridMenu定制产品配置是这样的:

gridMenuCustomItems: [ 
     { 
      title:'Custom Export', 
      action: function ($event) { 

       var exportData = uiGridExporterService.getData(this.grid, uiGridExporterConstants.ALL, uiGridExporterConstants.ALL, true); 

       var csvContent = uiGridExporterService.formatAsCsv([], exportData, this.grid.options.exporterCsvColumnSeparator); 

       uiGridExporterService.downloadFile (this.grid.options.exporterCsvFilename, csvContent, this.grid.options.exporterOlderExcelCompatibility); 

      }, 
      order:0 
     } 
    ] 

表显示正常,但是当我尝试导出为CSV,公司列出口与空值。这是我的Plunkr

任何建议将appretiated

参考

我做了一些研究,并根据ui-grid Issue #4948当公司中填入一个静态目录它的作品好。这是一个Plunkr解释这一点。

回答

0

我找到了CSV导出的解决方案,能够显示单元显示值。 我的错误是使用row.grid代替this.grid在mapCompany细胞过滤器:

columnDefs: [ 
    { field: 'name' }, 
    { field: 'company', cellFilter: 'mapCompany:row.grid.appScope.companyCatalog' } 
], 

使用它的正确方法是使用这样的:

columnDefs: [ 
    { field: 'name' }, 
    { field: 'company', cellFilter: 'mapCompany:this.grid.appScope.companyCatalog' } 
], 

这是我Plunkr

1

正如你提到的,出口的问题时,该列中的值不是静态的,所以我forked your plunker与创建每个数据对象的公司映射并将它作为一个键值,一旦你得到了一个解决方案公司目录回:

$http.get('https://api.github.com/users/hadley/orgs') 
    .success(function(data) { 

    $scope.companyCatalog = data; 
    angular.forEach($scope.gridOptions.data, function(item) { 
     var compMap = uiGridFactory.getMapCompany(item.company, $scope.companyCatalog); 
     item.mappedCo = compMap; 
    }); 
    }); 

我已经把原来的公司列,但使它不可见(而不是覆盖它),因此它与导出数据的CSV休息。新柱DEFS:

columnDefs: [ 
    { field: 'name' }, 
    { field: 'mappedCo', name: 'Company'}, 
    { field: 'company', visible: false } 
] 

而且,在你从服务器获取数据的情况下,你必须确保你运行映射函数之前的数据和目录返回。此解决方案可能无法在您的特定用例中起作用;我不知道。

+1

你好亚当斯。谢谢你的建议!在我的特殊情况下,我考虑了一个类似于你提出的这个选项的选项,但我不想创建一个虚假的列,因为我有很多类似问题的网格。如果我在一个月内找不到解决方案,我想我会使用这种方法。 – Aquiles

相关问题