gywm15111336483 发表于 2014-12-24 15:33:00

导出PDF ,WORD,EXECL

有没有FlashViewer以datatable为数据源的导出PDF,EXECL的列子啊, 为什么我在做导出的时候总是出这样的错误发生了一个意外错误。更多信息: 'No data has been set. Please specify either a DataSet or a DataView to use

string url = @"RDLC/ADrugSale.rdlx";
                GrapeCity.ActiveReports.PageReport report1 = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath(url)));
                //SetSelectedColumns(report1);
                report1.Document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(Document_LocateDataSource);
                GrapeCity.ActiveReports.Document.PageDocument _reportRuntime = new GrapeCity.ActiveReports.Document.PageDocument(report1);

                GrapeCity.ActiveReports.Export.Excel.Page.ExcelTransformationDevice _renderingExtension = new GrapeCity.ActiveReports.Export.Excel.Page.ExcelTransformationDevice();
                GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider _provider = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();
                GrapeCity.ActiveReports.Export.Excel.Page.Settings s = new GrapeCity.ActiveReports.Export.Excel.Page.Settings();

                _reportRuntime.Render(_renderingExtension, _provider, s);

                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("content-disposition", "attachment;filename=MyExport.xls");
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                _provider.GetPrimaryStream().OpenStream().CopyTo(ms);
                Response.BinaryWrite(ms.ToArray());
                Response.End();

gywm15111336483 发表于 2014-12-24 15:35:00

每次运行到了这样就_reportRuntime.Render(_renderingExtension, _provider, s);

出这样的错误发生了一个意外错误。更多信息: 'No data has been set. Please specify either a DataSet or a DataView to use   ,我的数据源类型是datetable

gywm15111336483 发表于 2014-12-24 15:36:00

最好是有FlashViewer以datatable为数据源的导出PDF,EXECL的列子

iceman 发表于 2014-12-24 16:46:00

回复 3楼gywm15111336483的帖子

请先参考博客文章尝试实现:
http://blog.gcpowertools.com.cn/post/2014/11/13/customize_flashviewer.aspx

有后续问题欢迎继续沟通。
谢谢

gywm15111336483 发表于 2014-12-24 16:47:00

我看的就你发的那个列子 ,用Datatable就会有问题

gywm15111336483 发表于 2014-12-24 16:48:00

你不信可以试试

gywm15111336483 发表于 2014-12-24 16:51:00

protected void Page_Load(object sender, EventArgs e)
      {
            if (IsPostBack)
            {
                return;
            }
            GrapeCity.ActiveReports.PageReport report1 = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("") + "\\PageReport1.rdlx"));
            report1.Document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(Document_LocateDataSource);
            WebViewer1.PdfExportOptions.FitWindow = false;
            WebViewer1.PdfExportOptions.DisplayMode = GrapeCity.ActiveReports.Export.Pdf.Section.DisplayMode.Outlines;
            WebViewer1.Report = report1;
            CustomizeToolBar();
      }

      private void CustomizeToolBar()
      {
            //设置显示语言版本为中文
            this.WebViewer1.FlashViewerOptions.ResourceLocale = "zh_CN";

            ToolButton btnWord = Tool.CreateButton("Word");
            btnWord.ToolTip = "导出到 Word";
            btnWord.Caption = "导出到 Word";
            btnWord.ClickNavigateTo = "ARExport.ashx?exporttype=Word";
            this.WebViewer1.FlashViewerToolBar.Tools.Add(btnWord);

            ToolButton btnExcel = Tool.CreateButton("Excel");
            btnExcel.ToolTip = "导出到 Excel";
            btnExcel.Caption = "导出到 Excel";
            btnExcel.ClickNavigateTo = "ARExport.ashx?exporttype=Excel";
            this.WebViewer1.FlashViewerToolBar.Tools.Add(btnExcel);
      }
      void Document_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
      {
            if (args.DataSourceName == "DataSource1")
            {
                if (args.DataSetName == "DataSet1")
                {
                  args.Data = GetDate();
                }
            }
      }
      private DataTable GetDate()
      {
            DataTable dt = new DataTable();
            dt.Columns.Add("Col1");
            dt.Columns.Add("Col2");
            dt.Columns.Add("Col3");
            dt.Rows.Add(1, 1, 1);
            dt.Rows.Add(2, 1, 1);
            dt.Rows.Add(3, 1, 1);
            dt.Rows.Add(4, 1, 1);
            dt.Rows.Add(5, 1, 1);
            dt.Rows.Add(6, 1, 1);
            return dt;

      }
你看下 我的代码

iceman 发表于 2014-12-24 17:16:00

回复 3楼gywm15111336483的帖子

问题出现的原因在于 Service 中没有添加数据源,请参考附件 demo:

gywm15111336483 发表于 2014-12-25 09:40:00

Service 中没有添加数据源,有类似的写法没有

iceman 发表于 2014-12-25 11:59:00

回复 9楼gywm15111336483的帖子

有两个建议可以提供给您:
1.把数据源部分抽成一个类,在各个页面、包括Service 中公用。
2.或者可以把数据源存入到 Session 中,直接咋在 Service 中获取。

谢谢
页: [1]
查看完整版本: 导出PDF ,WORD,EXECL