2017-09-25 161 views
0

我有一个可能有很多数据的Angular 2的Kendo UI Grid。因此,我正在使用包含计数并将数据放在分页网格中的API调用。当我点击导出到Excel按钮时,它只返回显示的数据。我希望能够导出整个数据集。Telerik Kendo UI Grid自定义Excel导出

我想我如下应该是使用fetchData方法,并包括其在网格:

<kendo-grid-excel fileName="MyExport.xlsx" [fetchData]="allResults"></kendo-grid-excel> 

然而,allResults方法必须返回一个ExcelExportData对象。我对API的方法调用返回一个被解析的observable。我试图在订阅事件中返回数据,但它给了我一个TypeScript错误,该方法必须返回一个值。如果我将返回类型更改为“任何”,则在获取外部应用的过滤器时,我会调用“this”时失败。

这是我目前获取方法:

allResults(): ExcelExportData { 
    if (!this.sort.length) { 
     this.sort.push({ field: undefined, dir: undefined }); 
    } 

    this.myService.resultsGet(
     this.filters.date, 
     ... 
     undefined, // skip 
     undefined, // take 
     this.sort[0].field, 
     this.sort[0].dir 
    ).subscribe(
     (pagedList: any) => { 
      for (let item of pagedList.results) { 
       // manipulate a few things here 
      } 
      return { data: pagedList.results }; 
     }, 
     e => { console.log(`error: ${e}`); } 
    ); 
} 

有什么办法来设置此作采用了棱角分明的分量滤波器,并通过订阅返回数据的外部API调用?

在此先感谢!

回答

0

它看起来像有两件事情正在进行:

  • 未定义:fetchData是不是在你的组件实例的范围内调用,所以你需要自己绑在

    this.allResults = this.allResults.bind(this); 
    
  • 返回值:假设您的服务正在从服务器获取,您需要返回一个promise或observable来获取数据,所以你不想订阅(),你想地图()

全部放在一起,你会得到这样的事情:

constructor(
    public myService: MyService 
    ) { 
    this.allResults = this.allResults.bind(this); 
    } 

    allResults() { 
    if (!this.sort.length) { 
     this.sort.push({ field: undefined, dir: undefined }); 
    } 

     this.myService.resultsGet(
     this.filters.date, 
     ... 
     0, // skip 
     undefined, // take 
     this.sort[0].field, 
     this.sort[0].dir 
    ).map(response => { 
     // manipulate a few things here 
     return <GridDataResult> { 
      data: response.value, 
      total: response.count 
     } 
    } 

更新:这里是一个这是根据Telerik的例子之一显示出来的。

excel export plunker

+0

感谢您对这个未定义的提示!回报仍然是一个问题。我遇到的问题是网格仅包含导出中所需的数据子集。我已经有了你为我用来加载网格的方法的所有结果编写的代码(尽管我使用订阅而不是地图)。这工作正常,因为网格可以处理Observables。当我单击“导出到Excel”按钮时,我需要一组用于返回ExcelExportData类型(allResults():ExcelExportData)的myService.resultsGet方法的不同参数。将返回放在地图中返回一个void。坎登能做到这一点吗? – ChristyPiffat

+0

我不确定你在问什么。我在上面添加了一个显示获取所有数据并修改它的运算器。 –