关于水晶报表的问题!(数据源的问题)

MH2o 2003-05-06 09:15:33
水晶报表可以有两种方式获得数据:1种是直接和数据库连接,第2种就是创建一个dataset然后连接该dataset。那么我想在程序中通过一个组件获得了一个dataset,我是不是可以在程序中指定*.rpt文件的数据源为通过接口获得的dataset呢?
...全文
40 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijianokey 2003-05-22
  • 打赏
  • 举报
回复
我也是这样做的,但是当把数据都填充进数据集,筛选后给报表显示时候出现这样的错误提示:
异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败。

哪位大侠指点一二啊。
inzaghizxm 2003-05-12
  • 打赏
  • 举报
回复
请问--hilanderst() ,你所说的View是指什么,是怎样获取的?
周自横 2003-05-12
  • 打赏
  • 举报
回复
我是这样写的,你可以试一下。
假如添加了一个数据集dsQry其中有个表TBLSTATEMP,和一个报表RptCustomer.rpt数据集用的是dsQry表中的tblCustomer.
并在一个窗体中加入一个CrystalReportView view;
1 DataTable dtLs = ds.Tables["TBLSTATEMP"].Copy();
2 RptCustomer ocr = new RptCustomer();
3 dsQry ds2 = new dsQry();
4 ds2.Tables.Remove("TBLSTATTEMP");
5 ds2.Tables.Add(dtLs);
6 ocr.SetDataSource(ds2);
7 view.ReportSource = ocr;
8 view.DataBind();

可能出现下面的错误就是,当你添加了一个现在项时,如报表是rptCustomer.rpt,他可会有rptCustomer1.cs,遇到这个问题,因为在你工种目录下已有一个rptCustomer.cs引起的,可将他们删除,再重新添加。
/////////////////////////////////////////////////////////////////////////////////查询引擎错误:“D:\WINNT\TEMP\temp_45c65a35-3e89-4ef5-a4d9-6e3f561fb755.rpt”
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: CrystalDecisions.CrystalReports.Engine.DataSourceException: 查询引擎错误:“D:\WINNT\TEMP\temp_45c65a35-3e89-4ef5-a4d9-6e3f561fb755.rpt”
/////////////////////////////////////////////////////////////////////////////////

要注意是数据集和报表须在同个命名空间,不然会出现如下的错误。
/////////////////////////////////////////////////////////////////////////////////
出错信息如下:
无法找到清单资源中的报告。请创建项目并再次尝试。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: CrystalDecisions.CrystalReports.Engine.InternalException: 无法找到清单资源中的报告。请创建项目并再次尝试。
//////////////////////////////////////////////////////////////////////////////////

当你ds.Tables["TBLSTATEMP"].Copy();中没有Tables中没有数据表STATEMP时会出现如下的错误
//////////////////////////////////////////////////////////////////////////////
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
源错误:
执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。
////////////////////////////////////////////////////////////////////////////////



MH2o 2003-05-06
  • 打赏
  • 举报
回复
是啊!我认为*.rpt在设计的时候就已经规定好了它要显示什么了!那怎么可以在程序里指定他的数据源呢?请高手赐教!
dhdhdh 2003-05-06
  • 打赏
  • 举报
回复
牛,给我个例子:deng_hui@km169.net
hilanderst 2003-05-06
  • 打赏
  • 举报
回复
可以的:
例如:你可以从一个view获取数据,灌到rpt中。经过以下步骤:
1.设计rpt,用view作数据背景
2.在程序中,做一个xsd,也用那个view作数据背景
3.运行时,声明一个步骤2中定义的类型的变量,
Dim rptDoc As New CrystalDecisions.CrystalReports.Engine.ReportDocument()
Dim dtDelive As RptDeliveData

rptDoc.Load(AppPath & "\common\rpt\RptDelive.rpt")
dtDelive = RptSellSys.GetRptDelive()
rptDoc.SetDataSource(dtDelive)
rvDelive.ReportSource = rptDoc
rvDelive是report viewer 控件,RptDeleveData是xsd定义的数据集类型
hilanderst 2003-05-06
  • 打赏
  • 举报
回复
修正:
1.在程序中,做一个xsd,也用那个view作数据背景
2.设计rpt,用xsd中的表作数据背景
其他依旧.

110,534

社区成员

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

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

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