2016-04-20 3 views
0

В настоящее время я пытаюсь сделать отчет, в котором используется таблица, чтобы упростить сортировку для пользователей. Я изучил много вопросов и документации, но я все еще боюсь с правильным способом создания отчета в JasperSoft Studio. Я работал так, но это очень медленно, и я уверен, что это не правильный метод. Здесь более или менее, как я это делаю в данный момент:Правильный способ использования таблицы отчетов Jasper с параметрами?

<subDataset name="Dataset1" uuid="6926ab77-6601-4046-a16e-ff19290b3c00"> 
    <parameter name="param" class="java.lang.Integer"/> 
    <queryString> 
     <![CDATA[select 
       fields 
       from table 
       where column = ($P{param})]]> 
    </queryString> 
    <!-- fields --> 
    <field name="field" class="java.lang.String"/> 
</subDataset> 
<parameter name="param" class="java.lang.Integer"/> 
<queryString> 
    <![CDATA[select 
      fields 
      from table]]> 
</queryString> 
<summary> 
    <band height="66"> 
     <componentElement> 
      <jr:table xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> 
       <datasetRun subDataset="Dataset1" uuid="933a99f0-f34a-457e-9b90-f641f54fe213"> 
        <datasetParameter name="param"> 
         <datasetParameterExpression><![CDATA[$P{param}]]></datasetParameterExpression> 
        </datasetParameter> 
        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> 
       </datasetRun> 
       <jr:column width="100" uuid="ad2b846b-732a-4b83-aec0-959f19ce2972"> 
        <jr:columnHeader style="Table_CH" height="30"> 
         <staticText> 
          <reportElement x="0" y="0" width="100" height="30" uuid="84616414-4739-471e-b853-7a537e72c959"/> 
          <text><![CDATA[columnHeader]]></text> 
         </staticText> 
        </jr:columnHeader> 
        <jr:detailCell style="Table_TD" height="30"> 
         <textField> 
          <reportElement x="0" y="0" width="100" height="30" uuid="bafa83be-5223-4f44-88dd-249256c22a72"/> 
          <textFieldExpression><![CDATA[$F{field}]]></textFieldExpression> 
         </textField> 
        </jr:detailCell> 
       </jr:column> 
      </jr:table> 
     </componentElement> 
    </band> 
</summary> 

Является ли это действительно необходимо для выполнения запроса в два раза? Если я попытаюсь удалить любой запрос и обойти его, таблица никогда не получит никаких данных. Эта проблема кажется такой простой, должен быть какой-то метод.

ответ

1

Я не вижу проблемы с тем, как вы используете параметры с помощью subDataset и запроса.

Ваша проблема в том, что вы дважды выполняете SQL-запрос. Чтобы избежать этого вам нужно иметь запрос вашего основного набора данных пуст:

<queryString> 
<![CDATA[]]> 
</queryString> 

, а затем из свойств отчета установлено следующее:

Когда Нет Тип данных: Все разделы Нет Подробный

Это заставит рендеринг всех ваших групп, за исключением детали одного, поскольку я предполагаю, что у вас его нет.

+0

Отлично, именно то, что я искал. Я решил, что будет такое простое решение. Спасибо огромное! – YamSMit

Смежные вопросы