【问题标题】:Telerik Kendo UI Grid Customizing Excel ExportTelerik Kendo UI Grid 自定义 Excel 导出
【发布时间】:2017-09-29 02:06:35
【问题描述】:

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

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

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

但是,allResults 方法必须返回 ExcelExportData 对象。我对 API 的方法调用返回一个 observable,然后对其进行解析。我尝试在订阅事件中返回数据,但它给了我一个 TypeScript 错误,该方法必须返回一个值。如果我将返回类型更改为“any”,则在外部应用过滤器时调用“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 调用并通过订阅返回数据?

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    看起来有两件事发生:

    • this undefined:fetchData 没有在你的组件实例的上下文中调用,所以需要你自己绑定

      this.allResults = this.allResults.bind(this);
      
    • 返回值:假设你的服务是从服务器获取的,你需要返回一个promise或者一个observable给fetchData,所以你不想要subscribe(),你想要地图()

    把它们放在一起,你会得到这样的东西:

       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

    【讨论】:

    • 感谢有关此未定义的提示!退货仍然是个问题。我遇到的问题是网格只有导出所需数据的子集。我已经有了你为 allResults 编写的代码,用于加载网格的方法(尽管我使用的是订阅而不是地图)。这很好用,因为网格可以处理 Observables。当我单击“导出到 Excel”按钮时,我需要一组不同的参数用于 myService.resultsGet 方法,该方法返回一个 ExcelExportData 类型 (allResults():ExcelExportData)。将返回值放入映射中会返回一个 void。剑道能做到吗?
    • 我不确定你在问什么。我在上面添加了一个 plunker,显示获取所有数据并对其进行修改。
    猜你喜欢
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多