求教高手关于vs2008自带的水晶报表发布的问题

picklejzg 2011-01-24 10:52:40
我用的是vs2008自带的水晶报表做一个asp.net的项目,

首先发按照我以前做水晶报表的经验,在web的设计页面上面拖了一个crystalReportViewer控件

然后建立一个DATASET文件,随后建了一个crystalReport文件,使用这个数据集。

然后在web页面的印刷button点击的时候检索数据集ds然后写下面一段话

reportDocument = new ReportDocument();
reportDocument.Load(RPTFile);
reportDocument.SetDataSource(ds);
ReportViewer.ReportSource = reportDocument;

然后单步调试结果是数据集有数据,但是这样走完了就算了,并没有把数据显示在web页面上,

请问各位高手应该怎样写才能实现在页面上显示数据?
...全文
227 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
picklejzg 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 koukoujiayi 的回复:]
不太清楚是否与系统的结构有关?
但能读到xsd我觉的应该是没什么问题!
我的意思是直接调用xsd下的GetData方法试试!如果这个还不行可能和系统的结构有关了!!
你试过12楼的代码?
[/Quote]

好的,我尽快试一下
picklejzg 2011-02-16
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 mac1106 的回复:]
写在page_init()里面
[/Quote]

我很奇怪为什么我的这个2008里面没有page_init()这个方法,只有page_Load()
mac1106 2011-01-30
  • 打赏
  • 举报
回复
写在page_init()里面
koukoujiayi 2011-01-28
  • 打赏
  • 举报
回复
不太清楚是否与系统的结构有关?
但能读到xsd我觉的应该是没什么问题!
我的意思是直接调用xsd下的GetData方法试试!如果这个还不行可能和系统的结构有关了!!
你试过12楼的代码?
picklejzg 2011-01-28
  • 打赏
  • 举报
回复
是不是跟我这个系统的结构有关,

不是一般的系统,要么是服务器,要么是客户端。
就在这一台机器上面做的,本机就是服务器的这种,如果有必要,我愿意把这个小系统的代码都发给您看。
picklejzg 2011-01-28
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 koukoujiayi 的回复:]
我觉得vs2008自带的报表很简单哦!
楼主会怎么麻烦??
可以贴点你的代码看看,包括xsd的字段!
[/Quote]

我也觉得水晶报表很简单啊,我原来做的2005+crXI的,感觉很简单啊。
大概是这个小系统好象是直接模拟的服务器+client端,具体结果不是我搭建的我也不太清楚。

我网上搜索到的例子都很简单,跟2005没有太大差别,可是在我这里就是不行。
我下午贴点代码过来,您要什么代码?

关于cr的部分的我在8楼都贴完了。
xsd就是最简单的,新建一个xsd文件,新建一个dataAdapter,通过webconfig连接数据库
写了一句select × from T_Edu_Volume,然后执行得到的一个dataset。
koukoujiayi 2011-01-27
  • 打赏
  • 举报
回复
我觉得vs2008自带的报表很简单哦!
楼主会怎么麻烦??
可以贴点你的代码看看,包括xsd的字段!
阿双2009 2011-01-27
  • 打赏
  • 举报
回复
不过按理说第一次加载应该是可以的,如果没保存到缓存,只是对之后每一次的页面刷新或报表翻页都会导致数据的丢失,从而出现让你输入登录信息的输入框,建议你先看下阿泰的这篇PUSH样板:PUSH模式 样板[推荐]

然后再结合我在17楼给的链接里面第二点:小代码,大作用(即保存到缓存)
picklejzg 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 luols 的回复:]
要保存到缓存,如Session,参考:http://blog.csdn.net/babyt/archive/2009/07/26/4610054.aspx

其中第二点:小代码,大作用
[/Quote]

谢谢,我先试验一下,毕竟现在我还是在摸索阶段,项目也只是做了个雏形,

等摸索的差不多了,session是一定要做的。

您的意思是,我一开始没有数据是因没有保存到session的原因吗?
阿双2009 2011-01-27
  • 打赏
  • 举报
回复
要保存到缓存,如Session,参考:http://blog.csdn.net/babyt/archive/2009/07/26/4610054.aspx

其中第二点:小代码,大作用
picklejzg 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 koukoujiayi 的回复:]

10楼的代码或者12楼的代码就够了!
其他代码删掉!!
[/Quote]

那我用的就是10楼道代码,
可是到这句话就会报错
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables[0]);
//或
CrystalReportSource1.ReportDocument.SetDataSource(ds_edu.Tables["T_EduSMdata_Volume"]);

请问我该怎么写呢?您这儿有例子可以给我参考一下吗?
vs2005的水晶报表程序我做过,没有这么麻烦啊,
是不是2008有很大的改变呢?
我网上到处也搜不到vs2008自带水晶报表的例子呢。
koukoujiayi 2011-01-26
  • 打赏
  • 举报
回复
10楼的代码或者12楼的代码就够了!
其他代码删掉!!
koukoujiayi 2011-01-26
  • 打赏
  • 举报
回复
你的ds中的表(包括字段)要和xsd中设置的表要一样哦!
picklejzg 2011-01-26
  • 打赏
  • 举报
回复
我试验了一下,把这段代码放在Page_Load里面写,这个数据库输入的框就没有了,可是另外的问题来了。

写成
CrystalReportSource1.ReportDocument.SetDataSource(ds_edu.Tables["T_EduSMdata_Volume"]);
的时候呢,运行出现加载报表错误,错误就指在这句话上

如果写成

CrystalReportSource1.ReportDocument.SetDataSource(ds_edu.T_EduSMdata_Volume[0]);

运行还是出现错误,说在这个dataset的位置0处没有任何行,我试过绝对是有数据的。

这段到底还如何写呢?
koukoujiayi 2011-01-26
  • 打赏
  • 举报
回复
如果直接调用xsd文件下的类,只要两句代码,如:

名称空间.你的TableAdapter xsdAdapter = new 名称空间.你的TableAdapter();
CrystalReportSource1.ReportDocument.SetDataSource((DataTable)xsdAdapter.GetData());

其中GetData()是“你的TableAdapter“下的某一个方法,当然可以调用其他方法!
koukoujiayi 2011-01-26
  • 打赏
  • 举报
回复
也可以直接调用xsd文件
koukoujiayi 2011-01-26
  • 打赏
  • 举报
回复
后台如果直接写应该是这样:
SqlConnection conn = new SqlConnection(...........);
SqlDataAdapter da = new SqlDataAdapter("select * from 表", conn);
DataSet ds = new DataSet();
da.Fill(ds);

CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables[0]);
//或
CrystalReportSource1.ReportDocument.SetDataSource(ds_edu.Tables["T_EduSMdata_Volume"]);
mac1106 2011-01-26
  • 打赏
  • 举报
回复
CrystalReportViewer1.DataBind();
picklejzg 2011-01-26
  • 打赏
  • 举报
回复
可是我单步执行的时候页面还没有出来跳出来数据库登录画面了啊
picklejzg 2011-01-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 koukoujiayi 的回复:]
引用 6 楼 picklejzg 的回复:
你好,我用你说的方法来做,但是一执行web页面就要求输入数据库连接的密码用户名了,这个怎么解决呢?

这要看你用什么方法取数据,可以如下:
//.......
CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["表名"]);
也可以:
CrystalReportSourc……
[/Quote]

不用这个CrystalReportSource1属性不行的对吗?

我用的push模式,建立一个xsd文件,也就是dataset名字叫做EduVolume,这个dataset的table叫做T_EduSMdata_Volume

下面是我按照你说的前台的写法:
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server"
AutoDataBind="true" ReportSourceID="CrystalReportSource1" />

<CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
<Report FileName="rptVolume.rpt">
</Report>
</CR:CrystalReportSource>

后台是这样写的:

ReportDocument oRpt = new ReportDocument();

oRpt.Load("D:\\GenchLogistics\\EduSM\\WebUI\\rptVolume.rpt");
EduVolume ds_edu = new EduVolume();

da.Fill(ds_edu);

oRpt.SetDataSource(ds_edu);
CrystalReportViewer CrystalReportViewer1 = new CrystalReportViewer();
CrystalReportViewer1.ReportSource = oRpt;

CrystalReportViewer1.DataBind();
CrystalReportSource CrystalReportSource1 = new CrystalReportSource();
CrystalReportSource1.ReportDocument.SetDataSource(ds_edu.Tables["T_EduSMdata_Volume"]);

前台按照你说的写了之后,立刻就可以预览到水晶报表的数据。

但是就是运行的时候跳出来数据库登录的画面,请问我后台的写法写的不对是吗?


加载更多回复(6)

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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