动态配置水晶报表数据源的问题。错误信息:无效报表源

蝈蝈俊 2003-10-14 10:54:45
代码如下:

this.crystalReportViewer1 = new CrystalDecisions.Windows.Forms.CrystalReportViewer();
this.reportDocument1 = new CrystalDecisions.CrystalReports.Engine.ReportDocument();

private void Form1_Load(object sender, System.EventArgs e)
{
reportDocument1.Load(@"E:\mydoc\Visual Studio Projects\WindowsApplication1\WindowsApplication1\rpt2.rpt");
SqlConnection conn = new SqlConnection("uid=sa;pwd=test;initial catalog=testDatabase;data source=(local);Connect Timeout=90");
conn.Open();
string SelectCmdString = "select ProductName,BookISBN,productNum,MarketPrice from v_bill_of_lading";
SqlDataAdapter mySqlDataAdapter = new SqlDataAdapter(SelectCmdString, conn);
DataSet ds1 = new DataSet();
mySqlDataAdapter.Fill(ds1);
reportDocument1.SetDataSource(ds1);
crystalReportViewer1.ReportSource = reportDocument1;
conn.Close();
}

说明:
E:\mydoc\Visual Studio Projects\WindowsApplication1\WindowsApplication1\rpt2.rpt 这个报表文件没有问题,我用水晶报表设计器打开,可以看到报表的数据。

...全文
529 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
haibodotnet 2003-10-15
  • 打赏
  • 举报
回复
如何将 .NET 程序迁移到 Crystal Report 9.2……(更新:2003-10-15,作者:海波.NET)
——————————————————————————————————————
新增10、问题:无效的报表源
新增9、如果你用的是 VS.NET 2003,则 Crystal Reports 9 (版本 9.2.0.x) 不能正确运行,需要升级到 CR 9 (版本 9.2.2.x).
——————————————————————————————————————
引言:
  期盼已久的,基于 Web 的,水晶报表打印,导出功能已经在 Crystal Report 9.2 里实现!
  但安装 Crystal Report 9.2 后,原有的 .NET 程序仍然无法拥有这些超级实用功能,原因何在?!
  在.NET 里,DLL Hell 问题被解决——包含元数据的,具有自描述性的程序集及其 XCopy 部署!
  但是,又似乎带来了新的问题——.NET 程序升级、迁移问题……
  升级不再只是简单安装,有工作不得不做了……
——————————————————————————————————————
目录
1、安装 Crystal Report 9.2……
2、修改 Visual Studio.NET 的工具箱设置
3、“旧版本的报表文件”的升级……
4、“旧版本的 CrystalDecisions 程序集引用”的修改……
5、“Web 窗体文件中,水晶报表命名空间引用”升级……
6、“Web.config 中的,水晶报表相关的程序集”升级……
7、问题:我升级了CrystalReport9.2,现在CrystalReportViewer不能往设计视图上拖放了,为什么?
8、问题:在web.config中新建一个工程时没有<assemblies><add assembly="CrystalDecisions.CrystalReports.Engine, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
9、问题:就是不行。 升级后没有拖放控件没有代码(1)!!!
10、问题:无效的报表源
——————————————————————————————————————
1、安装 Crystal Report 9.2……
首先卸载以前版本的 Crystal Report,如 Crystal Report For VS.NET,Crystal Report 9.0……
然后安装!
这样可以避免很多问题:
——————————————————————————————————————
2、修改 Visual Studio.NET 的工具箱设置
(1)右击“工具箱”,选择“自定义工具箱”,进入“自定义工具箱”对话框;
(2)选择“.NET 框架组件”选项卡,点击“程序集名称”列标题,使其根据“程序集名称”排序显示;
(3)取消选择所有 CrystalDecisions 版本为 9.1.xxxx.x 的组件;
(4)点击“浏览”按钮,选择“C:\Program Files\Common Files\Crystal Decisions\2.0\managed”文件夹,分别添加
CrystalDecisions.CrystalReports.Engine.dll:增加组件 ReportDocument、ReportClass,
CrystalDecisions.Web.dll:增加组件 CrystalReportViewer
CrystalDecisions.Windows.Forms.dll:增加组件 CrystalReportViewer
——————————————————————————————————————
3、“旧版本的报表文件”的升级……
用 Crystal Report 9.2 打开报表,做任意操作,然后撤销,最后保存,就会升级报表。
注意:升级后,不能用旧版本的 Crystal Decisions 产品使用……
——————————————————————————————————————
4、“旧版本的 CrystalDecisions 程序集引用”的修改……
(1)CrystalDecisions 程序集:
CrystalDecisions.CrystalReports.Engine
CrystalDecisions.Web
CrystalDecisions.Enterprise.Report
CrystalDecisions.ReportSource
CrystalDecisions.Shared
等等……
(2)存放“程序集引用”的文件——项目文件;扩展名为 ??proj,例如:C# 项目扩展名为 csproj
原引用,如 crystaldecisions.web:
<Reference
Name = "crystaldecisions.web"
AssemblyName = "CrystalDecisions.Web"
HintPath = "..\..\..\winnt\assembly\gac\crystaldecisions.web\9.1.3300.0__692fbea5521e1304\crystaldecisions.web.dll"
/>
升级后的引用:
<Reference
Name = "crystaldecisions.web"
AssemblyName = "CrystalDecisions.Web"
HintPath = "..\..\..\winnt\assembly\gac\crystaldecisions.web\9.2.3300.0__692fbea5521e1304\crystaldecisions.web.dll"
/>
(3)修改项目的“引用路径”:
在解决方案资源管理器里,右击项目,选择属性,进入项目属性页;
选择通用属性-〉引用路径:
c:\winnt\assembly\gac\crystaldecisions.web\9.2.3300.0__692fbea5521e1304\
——————————————————————————————————————
5、“Web 窗体文件中,水晶报表命名空间引用”升级……
原引用:
<%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web, Version=9.1.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>
升级后的引用:
<%@ Register TagPrefix="cr" Namespace="CrystalDecisions.Web" Assembly="CrystalDecisions.Web, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" %>
——————————————————————————————————————
6、“Web.config 中的,水晶报表相关的程序集”升级……
原引用:
<compilation defaultLanguage="c#" debug="true"><assemblies><add assembly="CrystalDecisions.CrystalReports.Engine, Version=9.1.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
……
升级后的引用:
<compilation defaultLanguage="vb" debug="true"><assemblies><add assembly="CrystalDecisions.CrystalReports.Engine, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
……
——————————————————————————————————————
7、问题:我升级了CrystalReport9.2,现在CrystalReportViewer不能往设计视图上拖放了,为什么?
解决方案:
1、右击“工具箱”上的选项卡,选择“自定义工具箱”,进入“自定义工具箱”对话框,选择“.NET框架组件”选项卡;
2、有四个 CrystalReportViewer,分别是:
CrystalDecisions.Web(9.2……
CrystalDecisions.Web(9.1……
CrystalDecisions.Windows.Forms(9.2……
CrystalDecisions.Windows.Forms(9.1……
选中:
CrystalDecisions.Web(9.2……
CrystalDecisions.Windows.Forms(9.2……
去除:
CrystalDecisions.Web(9.1……
CrystalDecisions.Windows.Forms(9.1……
总结:
可以看出,其实就是 9.1.3300.0 改成 9.2.3300.0!!!
这样,升级水晶报表文件后,直接替换所有文件(Web.config,项目文件,Aspx 文件)中该替换的地方,OK!!!
——————————————————————————————————————
8、问题:在web.config中新建一个工程时没有<assemblies><add assembly="CrystalDecisions.CrystalReports.Engine, Version=9.2.3300.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
我手工添加后出现配置错误!!!
解决方案:
新建一个解决方案,添加 Crystal Report Viewer,然后用它的 Web.config 覆盖原来的程序……
——————————————————————————————————————
9、问题:就是不行。 升级后没有拖放控件没有代码(1)!!!
问题分析:
如果你用的是 VS.NET 2003,则 Crystal Reports 9 (版本 9.2.0.x) 不能正确运行,需要升级到 CR 9 (版本 9.2.2.x).
具体问题如下:
- 添加新报表到项目,却没有生成相应的报表类文件
- 添加新报表或者报表查看器(viewer)到项目,却没有自动添加必需的引用
- 不能创建强类型报表(strongly-typed report)的实例
解决方案:
升级到 CR 9 (版本 9.2.2.x).
——————————————————————————————————————
10、问题:无效的报表源
问题分析:
ReportDocument、CrystalReportViewer 组件和 CrystalDecisions 程序集的版本不一致:
解决方法:
(1)删除所有的 CrystalDecisions 程序集引用;
(2)删除所有的ReportDocument、CrystalReportViewer 组件;
(3)按照2、修改 Visual Studio.NET 的工具箱设置;
(4)重新添加组件,自动生成新引用。
haibodotnet 2003-10-15
  • 打赏
  • 举报
回复
10、问题:无效的报表源
问题分析:
ReportDocument、CrystalReportViewer 组件和 CrystalDecisions 程序集的版本不一致:
解决方法:
(1)删除所有的 CrystalDecisions 程序集引用;
(2)删除所有的ReportDocument、CrystalReportViewer 组件;
(3)按照2、修改 Visual Studio.NET 的工具箱设置;
2、修改 Visual Studio.NET 的工具箱设置
(1)右击“工具箱”,选择“自定义工具箱”,进入“自定义工具箱”对话框;
(2)选择“.NET 框架组件”选项卡,点击“程序集名称”列标题,使其根据“程序集名称”排序显示;
(3)取消选择所有 CrystalDecisions 版本为 9.1.xxxx.x 的组件;
(4)点击“浏览”按钮,选择“C:\Program Files\Common Files\Crystal Decisions\2.0\managed”文件夹,分别添加
CrystalDecisions.CrystalReports.Engine.dll:增加组件 ReportDocument、ReportClass,
CrystalDecisions.Web.dll:增加组件 CrystalReportViewer
CrystalDecisions.Windows.Forms.dll:增加组件 CrystalReportViewer
(4)重新添加组件,自动生成新引用。
newpant 2003-10-15
  • 打赏
  • 举报
回复
关注!!!
UPUP
zhehui 2003-10-14
  • 打赏
  • 举报
回复
ghj1976(蝈蝈俊.net)
一般都是用XML做为数据源。
或都是这样改一下。
mySqlDataAdapter.Fill(ds1,"mytable");
reportDocument1.SetDataSource(ds1.Tables["mytable"]);
就是指定某一张表。

zhbname 2003-10-14
  • 打赏
  • 举报
回复
crystalReportViewer1是不是少了一個數據庫名
haibodotnet 2003-10-14
  • 打赏
  • 举报
回复
"select ProductName,BookISBN,productNum,MarketPrice from v_bill_of_lading";

对比 DataSet 和 Report,表名、字段名及其数量一致吗?
蝈蝈俊 2003-10-14
  • 打赏
  • 举报
回复
那该如何设置??
herofyf 2003-10-14
  • 打赏
  • 举报
回复
reportDocument1报表的数据源设置不对!我通常是用数据集文件,建立数据源时选择”ASP.NET(XML)类型的数据源“
xamcsdn2 2003-10-14
  • 打赏
  • 举报
回复
一可能是报表分发有问题,做安装程序时少了合并模块。
二可能是报表的DLL有问题,在项目里把原先的对水晶报表的引用去掉后,重新引用。
蝈蝈俊 2003-10-14
  • 打赏
  • 举报
回复
push方式,不存在登录数据库的问题。

这是crystal的一个bug,到crystal官方网站上去搜一下这个补丁:CR90DBEXWIN_EN.ZIP

补丁在:

http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90dbexwin_en.zip.asp


蝈蝈俊 2003-10-14
  • 打赏
  • 举报
回复
to lihonggen0

用你给的实列代码后,没有这个错误,但是打开报表的时候,会出现一个数据库、数据表、登陆名、登陆密码的输入框,但是我这里输入正确的也没用,照样是错误。
lihonggen0 2003-10-14
  • 打赏
  • 举报
回复
可能是数据源的问题!

我一般是在项目中加入这个报表文件

右键解决方案--->添加---添加现有项---把报表文件加进项目

蝈蝈俊 2003-10-14
  • 打赏
  • 举报
回复
目前有错误的程序代码在:
http://expert.csdn.net/ghj1976/rpt4sln.rar

这个代码是访问Northwind数据库的Orders表,用此来生成一个报表。

pengdali 2003-10-14
  • 打赏
  • 举报
回复
关注,帮忙up
蝈蝈俊 2003-10-14
  • 打赏
  • 举报
回复
crystalReportViewer1.DataBind();

没有这个方法呀。

我改成使用数据集文件,还是这个错误 “无效报表源”

我的代码:

SqlConnection conn = null;
conn = new SqlConnection("uid=sa;pwd=19760519;initial catalog=Northwind;data source=(local);Connect Timeout=90");
conn.Open();
string SelectCmdString = "select * from orders ";
SqlDataAdapter da = new SqlDataAdapter(SelectCmdString, conn);
Dataset1 ds = new Dataset1();
da.Fill(ds,"orders");
reportDocument1 = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
reportDocument1.Load(@"E:\mydoc\Visual Studio Projects\Rpt4Sln\win\rpt1.rpt");
reportDocument1.SetDataSource(ds);
crystalReportViewer1.ReportSource = reportDocument1;
crystalReportViewer1.DisplayGroupTree = false;
conn.Close();
haibodotnet 2003-10-14
  • 打赏
  • 举报
回复
string SelectCmdString = "select * from v_bill_of_lading";
……
mySqlDataAdapter.Fill(ds1, "v_bill_of_lading");
……
crystalReportViewer1.DataBind();

haibodotnet 2003-10-14
  • 打赏
  • 举报
回复
“动态配置水晶报表数据源”,这个名字太花哨了……
标准的叫法是“PUSH 模式”!

你的代码里也没绑定啊?!

“一般都是用XML做为数据源。”,也太宏观了……
是数据集文件:DataSet1.xsd!
只包含数据集类的 XML 架构的文件。
蝈蝈俊 2003-10-14
  • 打赏
  • 举报
回复
mySqlDataAdapter.Fill(ds1,"mytable");
reportDocument1.SetDataSource(ds1.Tables["mytable"]);

这样没用。

报表设计中,我直接在rpt中指定了测试数据库数据。指向的就是
v_bill_of_lading。

一般都是用XML做为数据源。
有没有动态配置数据,然后使用XML数据源的范例??

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧