CrystalReport水晶报表参数传递以及用dataset数据集做为数据源

分类:.Net知识问答| 发布:camnprbubuol| 查看: | 发表时间:2010/12/6

最近一直在研究和实践WinForm下的水晶报表,在网上找了很多参考资料,大多都是WEB下的,而且很多试了都不行,郁闷了和瞎摸索了好几天,

今天终于解决了,可以送一口气了。

具体我这几天解决的问题有:

1.在查看报表是,提示框要登录验证。

这样很不好,数据库的名字、登录名;都暴漏了。因为刚开始用报表,就开始摸索,然后发现(如图) 

“每次打印都加以验证” 把这个选项对钩去除,而后发现居然可以不用验证,直接就显示报表内容了。但是,等我再过一段时间看报表是,

居然又不行了,看来这个不治本。  

在“设置数据源位置”里,我用的是“创建新连接”-OLE DB(ADO),这种提供数据源的方式,本身就是要密码验证的,后来在网上看到一句

“CrystalReport1.SetDatabaseLogon("sa", "sa", @"127.0.0.1\SQLEXPRESS", "CamnprDB");”,好高兴,像发现了救命稻草,

这句我的理解是,用代码的方式给报表.rpt设置了永久验证,这样就不会在查看报表时密码验证了,但是结果还是很失望->不行。

在一段呆滞之后,我发现给报表提供数据源的方式不正确,于是就用:“项目数据”->“ADO.NET 数据集”;先来建一个“数据集”吧;

在“添加新项”里找到“数据集”,扩展名.xsd;然后在打开的“DataSet1.xsd”里,单击左侧的“工具箱”里拖出一个“TableAdapter”,

打开的一个配置向导,选择数据库链接(例如:

这些完成了,接下来:在WinForm的界面上拖一个ReportView控件,然后让建好的报表在此显示出来。

private void frmReportView_Load(object sender, EventArgs e)
        {
 

            CrystalReport1 crcr = new CrystalReport1();//这个是你建的报表
            //crcr.Load(Application.StartupPath + "/CrystalReport1 .rpt");//在此不用引用,因为我们已经实例化了CrystalReport1.rpt
            crcr.SetDataSource(new Camnpr.BLL.Camnpr_Users().GetList("UserID=’" + frmLogin.M_str_userid + "’").Tables[0]);

            //.Tables[0]这个别忘了。
            //crcr.SetParameterValue("@UserID", frmLogin.M_str_userid);//下边解说这一句
            crcr.SetDatabaseLogon("sa", "sa", @"127.0.0.1\SQLEXPRESS", "CamnprDB");//虽然这一句没什么必要,因为我们用数据集了。

            CReportViewer.ReportSource = crcr; //把这个报表给查看器。    
        }

至于“crcr.SetParameterValue("@UserID", frmLogin.M_str_userid);”,网上很多资料都会出现这句,我的理解是这句是给报表设置参数值的,因为这句也和我们在上边的“配置向导”/TableAdapter的属性 里添加的一个参数吻合呀,但是我把他注释了,因为运行是报错:

“无效索引。 (异常来自 HRESULT:0x8002000B (DISP_E_BADINDEX)) 报表”,不知道是什么原因,在此先搁置一下,有时间一定研究。

如果你要在报表里查找什么,代码多了一句:

private void btnLook_Click(object sender, EventArgs e)
        {
            string P_str_sql = " {Camnpr.Users.UserName} like ’" + boxUserName.Text.Trim() + "’";
           

            CrystalReport1 crcr = new CrystalReport1();

            crcr.SetDataSource(new Camnpr.BLL.Camnpr_Users().GetList("UserID=’" + frmLogin.M_str_userid + "’").Tables[0]);

            crcr.DataDefinition.RecordSelectionFormula = P_str_sql;
            crcr.SetDatabaseLogon("sa", "sa", @"127.0.0.1\SQLEXPRESS", "CamnprDB");

            CReportViewer.ReportSource = crcr;

        }

到此,应该就完了,可能以后还会遇到更多更刺手的问题,毕竟这只是学习报表的开始。

原创文章,欢迎转载,转载请标注:http://www.camnpr.com  郑州网建

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/archives/113.html