<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-0  評論-3  文章-28  trackbacks-0

    一. 把參數完全交過水晶報表

       打開報表文件.rpt,在字段資源管理器里,右擊參數-》新建

        在下面的選項屬性里可以設置參數的名稱,類型,提示文本,是否允許多個值,值范圍類型(如果是字符串用離散,日期或數字用范圍)

        注意:上面都是比填的,如果參數是用來對應某個字段的,類型必需跟該字段一樣。

       在值屬性里可以建一個值的列表,點上去,然后點右邊的按鈕就進入值列表編輯框了;是否提示時僅顯示說明;編輯掩碼,可以給參數的指定一定的格式;最小長度;最大長度;

       現在你可以給這個報表創建一個查看器jsp,加viewer標簽的就行了。

       注意這個jsp的頁面編碼設置為UTF-8.

    二.   參數所需包跟相關對象

         1.  需要的java類和包       

             com.crystaldecisions.sdk.occa.report.data.*

              com.crystaldecisions.reports.sdk.DataDefController

         2.  創建一個存儲參數字段的 Fields 對象。 參數對象都是放在這個里面,通過Fields對象可以添加、刪除和查找參數對象   

              Fields fields = new Fields();

         3.   ParameterField 參數字段對象。

              ParameterField paramField1 = new ParameterField();

         4. 為想設置的每個參數字段創建一個 Values 對象。Values對象是用來存儲ParameterFieldDiscreteValue 對象或 ParameterFieldRangeValue 對象

              Values newVals1 = new Values();

         5. 離散值對象ParameterFieldDiscreteValue 對象

            ParameterFieldDiscreteValue newDiscVal1 = new ParameterFieldDiscreteValue();

            ParameterFieldDiscreteValue[ ] newDiscVals = new ParameterFieldDiscreteValue[ ];

           范圍值對象ParameterFieldRangeValue 對象

            ParameterFieldRangeValue newRangeVal1 = new   ParameterFieldRangeValue();

            ParameterFieldRangeValue[ ] newRangeVals = new   ParameterFieldRangeValue[ ];

          他們的大概關系:一個Fields-》多個ParameterField

                                           一個ParameterField-》一個Values

                                          一個Values-》多個ParameterFieldDiscreteValue 或ParameterFieldRangeValue

    三.   后臺設置參數

          1.  參數的管理都是通過 報表DataDefController 來控制的。

              DataDefController dataDefController = new DataDefController();

              對于主報表 dataDefController = reportClientDoc.getDataDefController();

              對于子報表

              dataDefController = clientDoc.getSubreportController().getSubreport(reportName).getDataDefController();

          2.  參數的設置信息是通過 IDataDefinition 來獲取的。

               IDataDefinition dataDefinition = dataDefController.getDataDefinition();    

              如:Fields fields = dataDefController.getDataDefinition().getParameterFields() ;

              而對參數的設置改動是通過 ParameterFieldController 來控制的

               ParameterFieldController   paramfieldcontroller= dataDefController.getParameterFieldController( );

              如: 給主報表參數字段設置單個值

                paramFieldController.setCurrentValue("", "StringParam", new String("Hello"));         //字符串類型
                paramFieldController.setCurrentValue("", "BooleanParam", new Boolean(true));     //布爾類型
                paramFieldController.setCurrentValue("", "CurrencyParam", new Double(123.45));//貨幣類型
                paramFieldController.setCurrentValue("", "NumberParam", new Integer(123));         //數字類型

               給某個參數字段設置多個離散值

               Object [] multiVals = {"String1", "String2", "String3"};                     //注意要對應參數字段的類型
               paramFieldController.setCurrentValues("", "StringMultiParam", multiVals);

          3.  取得Fields

               Fields fields = dataDefController.getDataDefinition().getParameterFields() ;

           4.  對已經建立的參數字段,通過Fields的在知道名字的情況下通過Find方法取得

           ParameterField paramField = (ParameterField)dataDefController.getDataDefinition().getParameterFields().findField(parameterName, FieldDisplayNameType.fieldName, Locale.getDefault());

             參數字段七個基本類型
            布爾(Boolean) 、貨幣(Double)、數字(Integer)、字符串(String)、日期、日期時間、時間(Date)

            參數的值必須跟參數的類型符合才行.  

           5.  如果是新建的參數字段,那必需設置參數字段的報表名稱設置為與參數關聯的報表名稱。如果參數字段用于主報表,則使用空白字符串 ("")。使用 setReportName 方法設置報表名稱。

              paramField1.setName("Country");             //設置名字

              paramField1.setReportName("");              //如果為 "   "就是用于主報表,如果子報表,要設置字報表名

             如果是已經在rpt中存在的參數,就不用設置名字和報表名稱了,也不用添加到Fields中。

              newDiscVal1.setValue("China");               //設置離散值,后面將添加到參數值列表中

              newDiscVal1.setDescription("The country is China.");//這個要不要都沒關系

              將參數字段值添加到 Values 集合對象。   

               newVals1.add(newDiscVal1);                //可以添加多個

               為參數字段設置 Values 集合。

               pfield1.setCurrentValues(vals1);

               向 Fields 對象添加每個參數字段。 Fields 對象現在可用于查看器   

               fields.add(pfield1);                   //非新建參數不用

        下面是重點啦。雖然很簡單,但是折磨了我三天

         6.  改動查看報表JSP頁面的參數字段離散值列表或范圍值列表

              先用取得paramField對象,這個前面有說怎么取得,這里不多說了

             要添加的離散值

             ParameterFieldDiscreteValue newDiscValue = new ParameterFieldDiscreteValue();
             newDiscValue.setValue(newValue);

            取得原來的Values集合,在把Values集合克隆到一個新的Values集合。我原來是用paramField.getValues(),不知道是JRC中出錯還是什么,這個方法竟然完全沒用,paramField.getDefaultValues().才能真正的取得參數對象的Values集合

             Values newVals = (Values)paramField.getDefaultValues().clone(true);

            在原來的離散值中再添加多個離散值

            newVals.add(newDiscValue);

           為參數字段設置新的Values集合。這里原來是用paramField.setCurrentValues(newVals),也是不行,要用下面的   paramField.setDefaultValues(newVals);

            paramField.setDefaultValues(newVals);

    7.   禁用用戶提示,自動使用設置的參數字段值。這在以下情況中特別有用:所設置的參數字段值對于用戶為未知(例如系統生成的參數)。

          通過boolean multiValue = paramField.getAllowMultiValue();判斷報表是否允許多值。
        
          不允許多值的情況下:

      clientDoc.getDataDefController().getParameterFieldController().setCurrentValue(reportName, parameterName , newValue);

      如果是用于主報表,reportName為" ",否則為子報表名稱。

      允許多值的情況下:

      ①如果不考慮原來的離散值列表

       String[] newValues = new String[]{"China","USA",..........};

      clientDoc.getDataDefController().getParameterFieldController().setCurrentValues(reportName, parameterName ,newValues);

     

      ②在原來離散值列表的基礎上添加新的離散值,并設置

           DataDefController dataDefController = null;
           if(reportName.equals(""))
              dataDefController = clientDoc.getDataDefController();
          else
            dataDefController = clientDoc.getSubreportController().getSubreport (reportName).getDataDefController();
      
          ParameterField paramField = (ParameterField)dataDefController.getDataDefinition().getParameterFields().findField(parameterName, FieldDisplayNameType.fieldName, Locale.getDefault());

         ParameterFieldDiscreteValue newDiscValue = new ParameterFieldDiscreteValue();
         newDiscValue.setValue(newValue);

         Values newVals = (Values)paramField.getDefaultValues().clone(true);

         newVals.add(newDiscValue);

         clientDoc.getDataDefController().getParameterFieldController().setCurrentValue(reportName, parameterName ,newVals);

           查看器的設置

            crystalReportPageViewer.setParameterFields(fields);//這個感覺用不用都沒關系

            crystalReportPageViewer.setEnableParameterPrompt(false);

           報表的參數設置好后,則調用查看器的刷新方法以應用新的參數。

           if(session.getAttribute("refresh")==null){
                crystalReportPageViewer.refresh();
                session.setAttribute("refresh","true");
          }
         調用 processHttpRequest 方法以在當前的瀏覽器窗口中啟動此查看器。     

         crystalReportPageViewer.processHttpRequest(request, response, getServletConfig().getServletContext(), null);

        注意不要在查看器里面設置刷新按鈕,一按就會丟失參數設置。頁面編碼UTF-8。如果不行就tomcat profect-》reload this context

    posted on 2008-03-28 16:50 閱讀(623) 評論(0)  編輯  收藏 所屬分類: java基礎
    主站蜘蛛池模板: 亚洲乱码中文字幕综合234| 亚洲色成人网一二三区| 国产黄色免费观看| 久久久WWW免费人成精品| 亚洲中文字幕无码一区二区三区| 深夜特黄a级毛片免费播放| 亚洲jjzzjjzz在线观看| 亚洲美女一区二区三区| 亚洲人成图片网站| 中文字幕乱码系列免费| 亚洲精品不卡视频| 亚洲AV无码专区在线亚| 久久亚洲精品国产精品婷婷| 午夜爱爱免费视频| 四虎永久免费网站免费观看| 亚洲成人国产精品| 亚洲国产精品一区二区三区在线观看 | 国产午夜免费高清久久影院| 亚洲AV一宅男色影视| 一个人看的www在线观看免费| 亚洲黄色一级毛片| 精品视频免费在线| 亚洲欧洲第一a在线观看| 亚洲伊人久久大香线蕉| www免费黄色网| 亚洲欧洲日本在线| 97国产在线公开免费观看| 亚洲第一页综合图片自拍| 亚洲中文字幕无码中文| 国产无限免费观看黄网站| 日韩大片在线永久免费观看网站| 亚洲一区二区三区高清在线观看| 国产亚洲欧洲Aⅴ综合一区 | 成年轻人网站色免费看| 中国在线观看免费的www| 全免费一级午夜毛片| 亚洲经典千人经典日产| 亚洲综合免费视频| 亚洲人成电影在在线观看网色| 久久久无码精品亚洲日韩京东传媒| mm1313亚洲精品无码又大又粗|