本文主要是介绍使用VS.NET向水晶报表中的存储过程传递参数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
方法1,直接在报表对象上设置参数的值
- myReport1.SetParameterValue("@time1", "2008-11-01");
方法2,在reportViewer中添加参数。效果是一样的,只不过代码量不同。
- ParameterField param1 = new ParameterField();
- param1.ParameterFieldName = "@time1";parPrinter为你在报表设计器中添加的参数名
- ParameterDiscreteValue param1_Value = new ParameterDiscreteValue();//离散值
- param1_Value.Value = time1;
- param1.CurrentValues.Add(param1_Value);
- //向fields里面添加参数
- ParameterFields ParamFields = new ParameterFields();
- ParamFields.Add(param1);
- crystalReportViewer1.ParameterFieldInfo = ParamFields;
方法3,也可以传递参数,是方法2的简化版
- report1.ParameterFields["@team"].CurrentValues.AddValue(team);
另我灰常郁闷的是,搞了1天传不过去参数,原因仅仅是因为 参数前面忘记加 “@”符号(因为报表的数据源是存储过程)。天哪~~
-------------------------------------------------我是分割线------------------------------------------------------------------------------------
在使用水晶报表的时候也遇到了一些很有意思的事情。
首先,是遇到了传参数的问题,这个问题已经在上面解决了。
然后呢是遇到了弹数据库登陆窗口的问题,一开始我是将程序中查询数据库得到的DataSet作为报表的数据源的。如下:
- report1.SetDataSource(DataOperate.getReportData(time1, time2, team, type, Form1.conn));
这样写是会弹登陆窗口的,后来我把dataSource改成了DataSet.tables,如下
- report1.SetDataSource(DataOperate.getReportData(time1, time2, team, type, Form1.conn).Tables[0]);
这样写就不会弹登陆数据库窗口了,但是传入报表的参数在报表上面显示不出来了。根据参数查询出来的结果没错,但是就是在页面上显示不了参数。
所以在又改成这样:
-
- report1.SetDataSource(DataOperate.getReportData(time1, time2, team, type, Form1.conn));
- report1.SetDatabaseLogon("sa", "sa", "OMG", "JetPrint");
这样不会弹数据库登陆框了,也能显示参数了。
好了,一切正常了,但是我发现这样做多此一举了,我在编辑报表的时候已经用数据专家定义好了表内容了,这里再弄一个DataSet做为数据源,那不是报表和程序本身各取了一次数据集嘛~~ 所以我又这样改了
- report1.Load(Application.StartupPath + "mingxibiao.rpt");
- report.SetDatabaseLogon("sa", "sa", "OMG", "JetPrint");
直接加载报表。
这篇关于使用VS.NET向水晶报表中的存储过程传递参数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!