100分求水晶报表参数设置问题。。。。
我们系统里面用到水晶报表展示,就是从水晶里面读取参数出来,某些符合一定规则的参数自己设置展示的方式,程序是用用java实现的,,一般的报表设置参数都没问题。但是某些参数在为空的情况下第一次可以显示出来,翻页显示就要提示重新输入参数,点击确定才能看。我每个参数,即使为空都设置过的,。。水晶自己带的desktop.war在浏览这个报表的时候也会出现这样的问题,但是iis下的csp文件可以浏览。希望有兄弟遇到过这样情况的可以提供帮助。。。
代码如下:
IEnterpriseSession es = (IEnterpriseSession) session.getAttribute( "enterpriseSession ");
IInfoObject oInfoObject = (IInfoObject) session.getAttribute( "infoObject ");
IReport report = (IReport)oInfoObject;
List parameters = report.getReportParameters();
Fields fields = new Fields();
//0:number, 1:currency, 2:boolean, 3:date, 4:time, 5:datetime, 6:String
//0:数字、1:货币、2:boolean、3:日期、4:时间、5:时间日期、6:字符串
if(parameters.size() > 0){
int pSize = parameters.size();
for (int i = 0; i < pSize; i++){
IReportParameter param = (IReportParameter)report.getReportParameters().get(i);
String paramName = URLEncoder.encode(param.getParameterName(), "utf-8 ");
String paramValue = (String)requestParamMap.get(paramName);
ParameterField pf = new ParameterField();
pf.setAllowNullValue(false);
//设置参数名称
pf.setName(param.getParameterName());
//try{
//ParameterField pf = param.getParameterField();
//}catch(Exception e){}
//设置参数值类型
int valueType = param.getValueType();
switch(valueType){
case 0:
pf.setType(FieldValueType.numberField);
break;
case 1:
pf.setType(FieldValueType.currencyField);
break;
case 2:
pf.setType(FieldValueType.booleanField);
break;
case 3:
pf.setType(FieldValueType.dateField);
break;
case 4:
pf.setType(FieldValueType.timeField);
break;
case 5:
pf.setType(FieldValueType.dateTimeField);
break;
case 6:
pf.setType(FieldValueType.stringField);
break;
default:
break;
}
//设置参数值[只有离散值]
if(param.isDiscreteValueSupported()){
addDiscreteFieldValue(pf, param.getValueType(), paramValue);
}
fields.add(pf);
private void addDiscreteFieldValue(IParameterField paramField, int valueType, String paramValue) {
ParameterFieldDiscreteValue pfdv = new ParameterFieldDiscreteValue();
Values values = new Values();
switch (valueType) {
case 0:
case 1:
case 2:
case 6:
pfdv.setValue(paramValue);
break;
case 3:
case 4:
case 5:
SimpleDateFormat dateFormatter = new SimpleDateFormat( "(yyyy,M,d) ");
Date dateValue = dateFormatter.parse(paramValue.substring(paramValue.indexOf( '( ') ), new ParsePosition(0));
pfdv.setValue(dateValue);
break;
default:
pfdv.setValue(paramValue);
break;
}
values.add(pfdv);
//paramField.getCurrentValues().add(pfdv);
paramField.setCurrentValues(values);
}
[解决办法]
贴我的设置报表参数的方法给你,自己比对看看.
希望能帮到你.
/**
* 使用常规运行报表的方式,设置参数字段的方法
* @param viewer CrystalReportViewer
* @param paramValues Map
*/
public static void setViewerParameters(CrystalReportViewer viewer,
Map paramValues) throws
BusinessException {
try {
Fields paramFields = viewer.getParameterFields();
for (int j = 0; j < paramFields.size(); j++) {
ParameterField paramField = (ParameterField) paramFields.
getField(j);
Object value = paramValues.get(paramField.getName());
if (value != null && value instanceof List) {
Vector vc = (Vector) value;
Values values = new Values();
for (int i = 0; i < vc.size(); i++) {
String temp = (String) vc.get(i);
ParameterFieldDiscreteValue newDiscreteValue = new
ParameterFieldDiscreteValue();
newDiscreteValue.setValue(temp);
values.add(newDiscreteValue);
}
paramField.setCurrentValues(values);
} else if (value != null) {
Values values = new Values();
ParameterFieldDiscreteValue newDiscreteValue = new
ParameterFieldDiscreteValue();
newDiscreteValue.setValue(value);
values.add(newDiscreteValue);
paramField.setCurrentValues(values);
}
}
} catch (Exception ex) {
throw new BusinessException( "设置参数字段方法出错! ",ex);
}
}
[解决办法]
帮你顶吧
看那么多
头都大了