<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

    一. 把參數(shù)完全交過水晶報表

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

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

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

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

       現(xiàn)在你可以給這個報表創(chuàng)建一個查看器jsp,加viewer標(biāo)簽的就行了。

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

    二.   參數(shù)所需包跟相關(guān)對象

         1.  需要的java類和包       

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

              com.crystaldecisions.reports.sdk.DataDefController

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

              Fields fields = new Fields();

         3.   ParameterField 參數(shù)字段對象。

              ParameterField paramField1 = new ParameterField();

         4. 為想設(shè)置的每個參數(shù)字段創(chuàng)建一個 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[ ];

          他們的大概關(guān)系:一個Fields-》多個ParameterField

                                           一個ParameterField-》一個Values

                                          一個Values-》多個ParameterFieldDiscreteValue 或ParameterFieldRangeValue

    三.   后臺設(shè)置參數(shù)

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

              DataDefController dataDefController = new DataDefController();

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

              對于子報表

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

          2.  參數(shù)的設(shè)置信息是通過 IDataDefinition 來獲取的。

               IDataDefinition dataDefinition = dataDefController.getDataDefinition();    

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

              而對參數(shù)的設(shè)置改動是通過 ParameterFieldController 來控制的

               ParameterFieldController   paramfieldcontroller= dataDefController.getParameterFieldController( );

              如: 給主報表參數(shù)字段設(shè)置單個值

                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));         //數(shù)字類型

               給某個參數(shù)字段設(shè)置多個離散值

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

          3.  取得Fields

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

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

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

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

            參數(shù)的值必須跟參數(shù)的類型符合才行.  

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

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

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

             如果是已經(jīng)在rpt中存在的參數(shù),就不用設(shè)置名字和報表名稱了,也不用添加到Fields中。

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

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

              將參數(shù)字段值添加到 Values 集合對象。   

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

               為參數(shù)字段設(shè)置 Values 集合。

               pfield1.setCurrentValues(vals1);

               向 Fields 對象添加每個參數(shù)字段。 Fields 對象現(xiàn)在可用于查看器   

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

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

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

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

             要添加的離散值

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

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

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

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

            newVals.add(newDiscValue);

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

            paramField.setDefaultValues(newVals);

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

          通過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);

     

      ②在原來離散值列表的基礎(chǔ)上添加新的離散值,并設(shè)置

           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);

           查看器的設(shè)置

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

            crystalReportPageViewer.setEnableParameterPrompt(false);

           報表的參數(shù)設(shè)置好后,則調(diào)用查看器的刷新方法以應(yīng)用新的參數(shù)。

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

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

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

    posted on 2008-03-28 16:50 閱讀(629) 評論(0)  編輯  收藏 所屬分類: java基礎(chǔ)
    主站蜘蛛池模板: 久草福利资源网站免费| 男人扒开添女人下部免费视频| 免费国产在线视频| 国产gv天堂亚洲国产gv刚刚碰| 一个人晚上在线观看的免费视频| 免费的一级片网站| 蜜臀亚洲AV无码精品国产午夜.| 色窝窝免费一区二区三区 | 免费视频爱爱太爽了| 西西人体44rt高清亚洲| 99在线视频免费| 亚洲av无码不卡久久| 免费无码又黄又爽又刺激 | 亚洲午夜无码毛片av久久京东热 | 无码人妻精品中文字幕免费东京热| 亚洲AV第一页国产精品| 18女人水真多免费高清毛片| 亚洲黄色免费观看| 9久9久女女免费精品视频在线观看| 亚洲一级毛片免费在线观看| 美女黄网站人色视频免费国产 | 18禁美女裸体免费网站| 亚洲av无码不卡久久| 国产一级理论免费版| 国产免费久久精品丫丫| 国产精品免费观看| 亚洲一区在线免费观看| 国产免费午夜a无码v视频| 一级毛片a免费播放王色电影| 亚洲精品无码永久在线观看你懂的| 国产好大好硬好爽免费不卡| 亚洲国产成人久久99精品| 在线免费观看中文字幕| a在线视频免费观看在线视频三区 a毛片成人免费全部播放 | 亚洲三级中文字幕| 免费中文字幕一级毛片| 无码日韩精品一区二区免费暖暖| 97久久国产亚洲精品超碰热| 亚洲日韩人妻第一页| 99热精品在线免费观看| 亚洲youwu永久无码精品|