泰哥,请教你个问题(大家也进来发表下自己的看法啊)

tangserver 2009-07-10 04:20:14
VS2008 WEBFROM做的报表,运行时总是要我输入数据库密码才可以正常查看.我看了你的文章说:
a:如果是多表的话,可能是部分表没有赋值。
水晶报表需要对用到的每个表进行验证,即使没数据。没有的话,传个空的记录集也行。
b:代码没有放到Page_Load或Page_init里,或者是放到了,但是控制了 postback。
因为http是无状态的,如果控制了postback,水晶报表就丢失了前面的设置,会导致出现此情况的


第一种情况应该不会的,我是用的视图
b这个我不太懂.我是页面上一个BUTTON按钮,代码都写在这里面,下面我把代码贴出来你看看指点下吧

测试用的,页面很简单就一个button一个CrystalReportViewer

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
public partial class TimeSheet : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{


}
protected void Button1_Click(object sender, EventArgs e)
{
string sql = String.Format("SELECT * FROM dbo.V_工时报表");
DataSet ds = Maticsoft.DBUtility.DbHelperSQL.Query(sql);//一个获取DataSet数据的类
ReportDocument rpt = new ReportDocument();
rpt.Load(Server.MapPath("TimeSheet.rpt"));
rpt.SetDataSource(ds);

CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
}
}

...全文
111 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
呆虫 2011-12-22
  • 打赏
  • 举报
回复
都是高手啊。。
阿泰 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 llsen 的回复:]
引用 38 楼 babyt 的回复:
可以用arraylist之类的结构化数据。

...

然后指定数据源给报表就可以了,不用dataset,但是设计界面下是要dataset,
我这样运行是可以的

不止是否就是泰兄说的arraylist做数据源的本意?

[/Quote]

不一样,呵呵。arrayList也只是其中一种,
实质上用的是数据源里面,"项目数据"里的 ".Net Objects",简单点说,就是一个类(相当于一个数据库或者是dataset)
有一个和多个可以返回数据的方法(这个方法就类似于表了)。当然不是所有的类和方法都适用。

当然,用dataset做报表,传arraylist进去做数据源,也是完全可以的。并不一定非要ds.
llsen 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 babyt 的回复:]
可以用arraylist之类的结构化数据。
[/Quote]

我试了试,
用Push模式,新建数据源dataset,里面列名为Column1,Column2
然后加到报表上面。

后台代码,定义一个struct类S
public struct S
{
public DateTime Column1;
public int Column2;
}

里面包含两个属性,名称为Column1,Column2
然后数据源的话,可以如下获取array
ArrayList array = new ArrayList();
System.Random rd = new Random();
for (int i = 0; i < 200; i++)
{
S s;
t.Column1 = new DateTime(rd.Next(2000, 2010), rd.Next(1, 12), rd.Next(1, 28));
t.Column2 = rd.Next(100);

array.Add(t);
}
return array;


然后指定数据源给报表就可以了,不用dataset,但是设计界面下是要dataset,
我这样运行是可以的

不止是否就是泰兄说的arraylist做数据源的本意?
yanm7788 2009-07-15
  • 打赏
  • 举报
回复
[Quote=引用 40 楼 llsen 的回复:]
引用 38 楼 babyt 的回复:
可以用arraylist之类的结构化数据。


泰兄,有arraylist的例子吗,参考下。
[/Quote]
想学习下这方面的...能不能给个例子..
llsen 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 babyt 的回复:]
可以用arraylist之类的结构化数据。
[/Quote]

泰兄,有arraylist的例子吗,参考下。
阿泰 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 37 楼 tangserver 的回复:]
引用 36 楼 llsen 的回复:
引用 35 楼 tangserver 的回复:
想问一句push模式是不是一定要用DataSet数据集?


我用的都是ds
感觉其他的应该也可以。不过好像没见人用过


如果用DS每次做一个报表我就要重新编译一次上传服务器,这样很多用户会掉线,如果能只是上传一个文件不重新编译就好了
[/Quote]

系统升级应该在系统空闲时(如用户下班,用户较少时)进行,边改边上传是不可取的。
阿泰 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 llsen 的回复:]
引用 35 楼 tangserver 的回复:
想问一句push模式是不是一定要用DataSet数据集?


我用的都是ds
感觉其他的应该也可以。不过好像没见人用过
[/Quote]

可以用arraylist之类的结构化数据。
tangserver 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 llsen 的回复:]
引用 35 楼 tangserver 的回复:
想问一句push模式是不是一定要用DataSet数据集?


我用的都是ds
感觉其他的应该也可以。不过好像没见人用过
[/Quote]

如果用DS每次做一个报表我就要重新编译一次上传服务器,这样很多用户会掉线,如果能只是上传一个文件不重新编译就好了
llsen 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 tangserver 的回复:]
想问一句push模式是不是一定要用DataSet数据集?
[/Quote]

我用的都是ds
感觉其他的应该也可以。不过好像没见人用过
tangserver 2009-07-13
  • 打赏
  • 举报
回复
想问一句push模式是不是一定要用DataSet数据集?
tangserver 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 llsen 的回复:]
貌似讨论很激烈
楼主不厚道,问了问题,周末两天没来,还讨论

引用 32 楼 tangserver 的回复:
欧啦,走了这么多弯路还是因为pull模式模板push模式代码的问题,顺便弱弱的问一句,如果要按条件赛选数据好像只能用push模式吧

看阿泰的新文章啊
【水晶报表内功心法】--数据过滤
好像就是讲这个的
[/Quote]

呵呵,不好意思啊,双休没有上网所以就没来啦
llsen 2009-07-13
  • 打赏
  • 举报
回复
貌似讨论很激烈
楼主不厚道,问了问题,周末两天没来,还讨论

[Quote=引用 32 楼 tangserver 的回复:]
欧啦,走了这么多弯路还是因为pull模式模板push模式代码的问题,顺便弱弱的问一句,如果要按条件赛选数据好像只能用push模式吧
[/Quote]
看阿泰的新文章啊
【水晶报表内功心法】--数据过滤
好像就是讲这个的
tangserver 2009-07-13
  • 打赏
  • 举报
回复
欧啦,走了这么多弯路还是因为pull模式模板push模式代码的问题,顺便弱弱的问一句,如果要按条件赛选数据好像只能用push模式吧
tangserver 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 babyt 的回复:]
也不一定非要重定向啊。。

不过差不多就是这个意思,不传值区分怎么知道是显示哪个报表呢,呵呵
[/Quote]

呵呵,多谢啦,我按正确思路试试
阿泰 2009-07-13
  • 打赏
  • 举报
回复
也不一定非要重定向啊。。

不过差不多就是这个意思,不传值区分怎么知道是显示哪个报表呢,呵呵
tangserver 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 babyt 的回复:]
“一个web页面根据不同条件显示不同报表”

是不同的报表还是不同的数据呢,当然,都可以实现

不同的报表也只是Load起不同的rpt文件,然后设置数据库信息
(如果是同一个数据库的话,代码都可以共用的)



[/Quote]

你的意思是不是每次用户选择报表的时候我就重定向到这个页面并且传个值过来获取显示的报表?
阿泰 2009-07-13
  • 打赏
  • 举报
回复
“一个web页面根据不同条件显示不同报表”

是不同的报表还是不同的数据呢,当然,都可以实现

不同的报表也只是Load起不同的rpt文件,然后设置数据库信息
(如果是同一个数据库的话,代码都可以共用的)


tangserver 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 tangserver 的回复:]
还有一个地方我不太明白,我做的是在一个web页面根据不同条件显示不同报表,这样代码肯定要写在一个button事件里,但pull模式的话我代码应该怎么写呢
[/Quote]

pull模式可以实现我的要求吗
阿泰 2009-07-13
  • 打赏
  • 举报
回复
要说区别,就是Asp.net CrystalReports站点就是在Asp.net 站点的基础上,自动添加了相关的组件,并且自动加了一个水晶报表模板。
主要是把我们必须的几个动作,事先放进去了,其余没什么特别。

你完全可以再现有的网站上增加水晶报表功能,就是要手工添加相关的dll的引用。

tangserver 2009-07-13
  • 打赏
  • 举报
回复
还有一个地方我不太明白,我做的是在一个web页面根据不同条件显示不同报表,这样代码肯定要写在一个button事件里,但pull模式的话我代码应该怎么写呢
加载更多回复(24)

4,818

社区成员

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

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