找回密码
 立即注册

QQ登录

只需一步,快速开始

aj510105

最新发帖
frank.zhang
社区贡献组   /  发表于:2015-6-25 11:34:00
11#
回复 9楼aj510105的帖子

您好,
在这个问题中,有一点我没有说明白。
WebViewer1_LocateDataSource事件,是webviewer的事件。
导出的时候,直接使用报表进行导出,没有加载到webviewer,所有不会触发这个事件。
回复 使用道具 举报
aj510105
注册会员   /  发表于:2015-6-25 13:45:00
12#
你好,我看了您传的附件中的例子。通过指定_reportDef.Report.DataSources[0]的连接字符串,再通过传入_reportDef.Report.DataSets[0]的查询语句,确实能拿到数据。
但是这样直接在报表后台页面写连接字符串和sql语句的方式,和我期望的有些不一样。
我们是将和数据库之间的交互部分都放在单独的项目中,而不是在每个工作页面上单独对数据库进行连接并查询。
假如需要导出报表时,都通过调用公共的方法返回datatable数据,再将Datatable绑定到报表数据源,导出结果。

GrapeCity.ActiveReports.PageReport _reportDef = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("/Reports/" + reportName + ".rdlx")));
            _reportDef.Report.DataSources[0].DataSourceReference = "";
            _reportDef.Report.DataSources[0].ConnectionProperties.DataProvider = "OLEDB";
            _reportDef.Report.DataSources[0].ConnectionProperties.ConnectString = string.Format(&quotrovider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", Server.MapPath("/Data/NWind_CHS.mdb"));
            string productSql = string.Format("SELECT * From 产品 where 产品ID = {0}", productId);
            _reportDef.Report.DataSets[0].Query.CommandText = productSql;
            GrapeCity.ActiveReports.Document.PageDocument _reportRuntime = new GrapeCity.ActiveReports.Document.PageDocument(_reportDef);
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-6-25 14:25:00
13#
您好,
对您的需求,我理解为,只能使用datatable的数据,实现报表的显示和导出功能。

我对上一个例子程序进行了修改,都使用datatable的方式进行数据的绑定。
  1. _reportRuntime.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(_reportRuntime_LocateDataSource);
复制代码

  1.         void _reportRuntime_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
  2.         {
  3.             string connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};", Server.MapPath("/Data/NWind_CHS.mdb"));
  4.             string productSql = string.Format("SELECT * From 产品 where 产品ID = {0}", productId);
  5.             DataLayer dl = new DataLayer(connStr, productSql);
  6.             args.Data = dl.DataSetData.Tables["Products"];
  7.         }
复制代码





希望能够帮助到您。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
aj510105
注册会员   /  发表于:2015-6-25 16:33:00
14#
你好,根据上面提供的方法,成功实现了动态绑定数据源进行导出的目的。但是出现了一个新问题
调试程序执行到response.End();的时候,出现如下提示的错误:
提示:System.Threading.ThreadAbortException”类型的第一次机会异常在 mscorlib.dll 中发生



然后点击继续,能导出正常的报表

代码部分都是从DynamicParameters (4).zip 复制过来
只改了_reportRuntime_LocateDataSource下面获取DataTable的方法
报表只有一个chart没有table

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-6-25 17:06:00
15#
您好,
这个原因是因为线程退出时,没有通知主线程导致的。但是,线程的工作已经完成。所以可以忽略。
如果,您在使用vs中不再想看到这个提示可以关闭

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
aj510105
注册会员   /  发表于:2015-6-25 17:13:00
16#
明白了,问题已解决。谢谢
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-6-25 17:47:00
17#
您好,问题已经解决,本帖关闭,如有其它问题,请开新帖。

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部