首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

100分求水晶报表参数设置有关问题。

2012-01-16 
100分求水晶报表参数设置问题。。。。我们系统里面用到水晶报表展示,就是从水晶里面读取参数出来,某些符合一定

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);
}
}
[解决办法]
帮你顶吧

看那么多

头都大了

热点排行