读书人

【水晶报表内功心法】-PUSH模式样板招

发布时间: 2012-01-11 22:28:46 作者: rapoo

【水晶报表内功心法】--PUSH模式样板招式
索引

.【水晶报表内功心法】--序言
.【水晶报表内功心法】--推拉之间
.【水晶报表内功心法】--PULL模式样板招式
============================================================
前篇讲解了PULL模式下的操作方法,比较简单。
本文进一步详细讲解一下PUSH模式下的样板操作。
仍以Web为例

新建一个 Asp.Net CrystalReports的网站

弹出下面这个界面后,选第2项-作为空白报表,然后点确认,进入一个空白界面。

新建一个数据集合


出现此提示时,点“是”


然后还会出来连接数据库的提示,一律点否,直至界面上什么提示也没有
在这个界面上,点右键,添加一个datatable,命名为myTable。


然后在myTable里增加相应的列,我这里有3个列,注意要设置好类型。




特别说明:
因为水晶报表里不认datatime型,对于2009-06-26 9:23:15
会自动截断为2009-06-26
所以datatime型数据在xsd文件中,可设置为string型
而代码中的SQL中可把字段转换为String传入。

xsd设计完毕后,开始进入报表模板设计阶段。

在“数据库字段”上点右键,选“数据库专家”


再弹出的界面上,点“项目数据”,依次点开,找到我们刚才自己做的mytable


确定后,在“数据库专家”下面会出现表名mytable,点开后会看到字段,
把字段拖到模板上的详细资料节即完成基础模板的制作了


点一下预览,会看到虽然我们还没有任何实际的数据操作,但是界面上已经有数据了
这是水晶报表的一个虚拟数据,可以看到一个最终显示的效果。


好了,上代码

C# code
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using CrystalDecisions.Shared;using CrystalDecisions.CrystalReports.Engine;using CrystalDecisions.Web;using System.Data.OleDb;public partial class _Default : System.Web.UI.Page {    protected void Page_Load(object sender, EventArgs e)    {        ConfigureCrystalReports();    }    private void ConfigureCrystalReports()    {               //连接字串        String connstr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\CrZen\testall.mdb;";        OleDbDataAdapter da = new OleDbDataAdapter();        OleDbConnection cn = new OleDbConnection(connstr);        //        da = new OleDbDataAdapter("SELECT * From RPT_CR_TEST1", cn);        //创建我们的DataSet1实例        DataSet1 dt1 = new DataSet1();        //填充dt1        //注意:表名mytable必须与我们在xsd设计的表名称一致。        //本例中数据库的表实际名称为RPT_CR_TEST1,而最终是以mytable为准的        //使用 PUSH模式的优点就在此,可以自由组合SQL        //前提是表名称和字段名(需要在SQL中使用as别名的方式跟xsd中设计的字段名一致)都要一致        da.Fill(dt1, "mytable");                  ReportDocument myReport = new ReportDocument();        string reportPath = Server.MapPath("crystalreport1.rpt");        myReport.Load(reportPath);        //绑定数据集,注意,一个报表用一个数据集。        myReport.SetDataSource(dt1);        CrystalReportViewer1.ReportSource = myReport;    }}


然后运行就可以了。



这里做一下说明,在【推拉之间】没有说这个xsd,是因为当时没讲到细节操作。
说了很难理解。
这个xsd,是我们自己构造的,做个比喻吧:
就是xsd比作个一个架子,它负责把水晶报表撑起来,但是是空的,没有内容
我们用 PUSH模式,把数据塞给它,把架子塞满,这样水晶报表也就能呈现出效果来


常见问题:
1:报表可以显示出来,但是没数据,
一般有以下几种情况
a:表中确实没数据
b:da.Fill(dt1, "mytable");表名称与xsd中设计的表不一致
c: 如果你用了多个表,可能是因为表默认的关联关系导致无数据

2:出现下面这个图的提示,特别是翻页、打印、导出的时候,因为这些动作都需要重新连接数据库源。


a:如果是多表的话,可能是部分表没有赋值。
水晶报表需要对用到的每个表进行验证,即使没数据。没有的话,传个空的记录集也行。
b:代码没有放到Page_Load或Page_init里,或者是放到了,但是控制了 postback。
因为http是无状态的,如果控制了postback,水晶报表就丢失了前面的设置,会导致出现此情况的

预告:

两篇基础讲完了,也为后面做好了比较坚实的铺垫。
所以我就加快进度了。
下一篇:掌控于股掌之间-代码中传参数、传公式、操作水晶报表里的所有对象




[解决办法]

好多看不懂锝
[解决办法]
嘿嘿,上班时间没时间看,周末再看看
[解决办法]
你好厉害啊!怎么才能挣积分啊?
[解决办法]
真!
------解决方案--------------------


厉害
[解决办法]
这会是明白了PUSH和PULL的区别了,上次您画简单图,我还不是很明白,现在可以结合那个一起去理解了,不过代码到现在我还不是很懂,看来这方面要加强学习了,多谢了,阿泰!周末愉快了,回家了哦!
[解决办法]

[解决办法]
很详细..
[解决办法]
感谢,顶.
[解决办法]
基本上,看图片上的操作就一目了然了,O(∩_∩)O哈哈~
[解决办法]

[解决办法]
mark
[解决办法]
不错啊 学习了
[解决办法]
一下退出来两篇
先顶再看
[解决办法]
Tag!
[解决办法]
看Push模式还是很有感觉的
觉得很熟悉,很亲切呵呵。

引用楼主 babyt 的帖子:
a:表中确实没数据
b:da.Fill(dt1, "mytable");表名称与xsd中设计的表不一致

[解决办法]
感谢,顶.

[解决办法]
Up
[解决办法]
学习,
[解决办法]
好贴...
[解决办法]
学习
[解决办法]
接着顶
[解决办法]
好西,值,值得,上去!!
[解决办法]
貌似是VS2008的吧~~!!
终于出来了,呵呵~~!!
虽然上面的我基本都会了,不过这是个好的开头啊~~!
[解决办法]
你的教程,视频我都下载了,在学。非常好。

期待下一步的教程,最好有视频,呵呵
[解决办法]
学习
[解决办法]
UP~
[解决办法]
认真学习,谢谢楼主

读书人网 >.NET

热点推荐