muhuiru 发表于 2016-11-24 16:01:07

导出Excel时在后台如何传数据集

导出Excel时在后台如何传数据集
不用连数据库直接传数据集

Lenka.Guo 发表于 2016-11-24 17:05:46

给报表绑定数据源是通过调用Document.LocateDataSource方法。
如果不想重复执行此方法,需要在首次生成报表的Document 对象后,调用LocateDataSource完成后。将Document对象保存。

然后在导出Excel时,调用保存的Document对象。

muhuiru 发表于 2016-11-25 09:59:17


数据不显示

Lenka.Guo 发表于 2016-11-25 11:22:21

本帖最后由 Lenka.Guo 于 2016-11-25 11:27 编辑

muhuiru 发表于 2016-11-25 09:59
数据不显示
您的代码看起来有点问题。
首先您使用上面的代码报表能正常加载吗?
按照下面的思路修改
PageReport rpt=new PageReport("报表路径");
Document.PageDocument rptd= new PageDocument(rpt);
rptd.LocateDataSource();
rptd.Render();

muhuiru 发表于 2016-11-28 10:19:54

能否发个 在C#下具体实现的代码,多个数据集的

Lenka.Guo 发表于 2016-11-28 10:27:28

muhuiru 发表于 2016-11-28 10:19
能否发个 在C#下具体实现的代码,多个数据集的

先跟您确认下应用场景:
1. 您是一个报表中多个数据集还是 多个报表共同调用一个LocateDataSource 方法?

2. 想要实现的是运行时数据源导出Excel功能?

码农 发表于 2016-11-28 11:53:02

需要实现 一个报表中 有多个数据集时 , 运行时 是通过后台获取到的数据集导出EXCEL

Lenka.Guo 发表于 2016-11-28 14:18:48

码农 发表于 2016-11-28 11:53
需要实现 一个报表中 有多个数据集时 , 运行时 是通过后台获取到的数据集导出EXCEL

导出Excel与数据集的数量没有关系,只是要确认好导出的时间点。

1. 在LoadDataSource 方法后,调用ExportToExcel 方法:

GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(@"RdlReport1.rdlx"));
            GrapeCity.ActiveReports.Document.PageDocument rptd = new GrapeCity.ActiveReports.Document.PageDocument(rpt);
            rptd.LocateDataSource += Rptd_LocateDataSource;
            ExportToExcel(rptd);

2. 实现导出功能:


private void ExportToExcel(PageDocument document)
      {
            System.IO.DirectoryInfo outputDirectory = new System.IO.DirectoryInfo(@"D:\MyExcel");
            outputDirectory.Create();

            GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtensionSettings excelSetting = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtensionSettings();
            excelSetting.FileFormat = GrapeCity.ActiveReports.Export.Excel.Page.FileFormat.Xls;
            GrapeCity.ActiveReports.Extensibility.Rendering.ISettings setting = excelSetting;
            GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension excelRenderingExtension = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelRenderingExtension();
            GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider outputProvider = new GrapeCity.ActiveReports.Rendering.IO.FileStreamProvider(outputDirectory, System.IO.Path.GetFileNameWithoutExtension(outputDirectory.Name));
            document.Render(excelRenderingExtension, outputProvider, excelSetting.GetSettings());




      }


3. Rptd_LocateDataSource 方法

private void Rptd_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            if (args.DataSourceName == "DataSource1")
            {
                switch(args.DataSetName)
                {

                  case "DataSet1": args.Data = getDataSet1();break;
                  case "DataSet2": args.Data = getDataSet2();break;
                  case "DataSet3": args.Data = getDataSet3(); break;

                }

         

            }

            
      }

码农 发表于 2016-11-28 20:22:26

按照你说的,我没有写出来,能否给个能运行的源码。 我发现实现导出的方法和你的有些不同

码农 发表于 2016-11-28 20:36:56

我这边自己有个打印按钮,那我需要触发什么事件,才能去调用你的ExportToExcel函数呢
页: [1] 2
查看完整版本: 导出Excel时在后台如何传数据集