Telerik Kendo UI网格自定义Excel导出

时间:2017-09-25 19:45:11

标签: angular kendo-grid export-to-excel kendo-ui-angular2

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

我认为我应该使用fetchData方法并将其包含在网格中,如下所示:

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

但是,allResults方法必须返回ExcelExportData对象。我对API的方法调用返回一个然后被解析的observable。我已尝试在subscribe事件中返回数据,但它给我一个TypeScript错误,该方法必须返回一个值。如果我将返回类型更改为&#34;任何&#34;,则在我打电话给&#34时失败;这个&#34;从外部获取过滤器时。

这是我目前的获取方法:

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调用并通过订阅返回数据?

提前致谢!

1 个答案:

答案 0 :(得分:0)

看起来有两件事情发生了:

  • 未定义:fetchData未在组件实例的上下文中调用,因此您需要自己绑定

    this.allResults = this.allResults.bind(this);
    
  • 返回值:假设您的服务是从服务器获取的,您需要将promise或observable返回给fetchData,因此您不希望 subscribe() ,你想要 map()

总而言之,你得到这样的东西:

   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的一个例子,这是一个显示此内容的plunker。

excel export plunker