在很多时候, 你会向报表中传递一些比较零散的数据, 并且这些数据是动态的, 有些可以从数据库中取得, 有些是自己自定义的. 而水晶报表的数据源不允许自定义的字段, 这个时候你就可以中参数来解决这个问题了, 你可以在后台把 值 传递给 报表中的对应参数. (ps.参数名字不分大小写)
//
STRING VALUE PARAMETER.
String stringValue
=
"
my title33
"
;
//
TODO: Fill in value
//
HashMap变量中的元素的key值对应报表中参数的名字
HashMap map
=
new
HashMap();
map.put(
"
p1
"
,stringValue);
map.put(
"
p2
"
,
"
abx
"
);
map.put(
"
p3
"
,
"
abc
"
);
//
报表参数的Controller
ParameterFieldController parameterFieldController
=
clientDoc.getDataDefController().getParameterFieldController();

if
(parameterFieldController
==
null
)
...
{
throw new NullPointerException("Can't get ParameterFieldController!!");
}
//
HashMap对象的迭次
Iterator it
=
map.keySet().iterator();

while
(it.hasNext())
...
{
String key = (String)it.next();

try...{
if(!"".equals(key) && key != null)//下面这个方法最重要, 对参数赋值
parameterFieldController
.setCurrentValue("", key.trim(), map.get(key));

}catch(ReportSDKException rde)...{
//处理出现没对应的参数或其他原因的异常
System.out.println("Parameter:" + key + " throw Exception!!: " + rde);
}
}
我的报表文件中有2个参数, 分别是p1和p2, 没有p3, 所以抛出异常, 不过我不想界面上显示异常的信息, 也不想异常中断我的程序, 所以我只是把异常的相关信息显示在控制台里面.
运行后我的报表的参数p1和p2都被成功赋值, 控制台也显示了空参数的异常, 当然那是没有p3的缘故.
是不是很简单, 由于这只是个小小的例子, 所以写得很简单. 但在实际运用中要加以完善才行, 对方法更好的封装, 对数据更加完善的判断.
//例子中用到的类, 想把下面的东西插入到代码中, 死活没反映!!!!!
java.util.HashMap,
java.util.Iterator,
com.crystaldecisions.reports.sdk.ParameterFieldController,
com.crystaldecisions.sdk.occa.report.lib.ReportSDKException,
java.lang.NullPointerException
(有谁知道在csdn的blog中怎么上传图片吗? 唉, 有些东西用文字还真是难说清楚啊!)