最近一直在研究和实践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 郑州网建