1

グリッドとJavaのクラスを使用してデータを行にレンダリングしていますが、すべて正常に機能し、データはグリッドに表示されますが、データをグリッドにレンダリングするボタンを2回クリックすると問題が発生します、データはまだそこにあり、新しいデータが行に追加されます。私は使用していますJboss 4.2

これは RowRender Java クラスです。

import org.zkoss.zul.Label;
import org.zkoss.zul.Row;
import org.zkoss.zul.RowRenderer;

public class MyRowRenderer implements RowRenderer<Object> {
    @Override
    public void render(final Row row, final java.lang.Object data, int arg2)
            throws Exception {
        String[] ary = (String[]) data;
        for(int i=0;i<ary.length;i++){
            new Label(ary[i]).setParent(row);
        }
    }
}

これは、Java クラス リスナーの一部です。

public void onClick$generar(Event e) {
        try {
            if(fecha.getValue()==null){
                Messagebox.show("Ingresa una fecha valida MM-yyyy", "Error", Messagebox.OK, Messagebox.ERROR);
            }else{
                SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
                ffecha = formato.format(fecha.getValue()).substring(0, 7);
                String Order = orderby.getSelectedItem().getValue().toString();
                String Modo = modo.getSelectedItem().getValue().toString();
                inboxGrid.setModel(new ListModelList(getUpdatedData(ffecha, Order, Modo)));
            }
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
    }

これは、index.zul の GRID です。

<grid id="inboxGrid" mold="paging" pageSize="15"
                rowRenderer="com.app.reports.MyRowRenderer"
                emptyMessage="Sin Registros!">
                <auxhead>
                    <auxheader colspan="5" class="topic">
                        REPORTE MENSUAL
                    </auxheader>
                </auxhead>
                <columns>
                    <column width="100px" label="CLAVE" align="center" />
                    <column label="SUCURSAL" align="center" />
                    <column width="100px" label="PAGINAS"
                        align="center" />
                    <column width="100px" label="EDO CUENTA"
                        align="center" />
                    <column width="100px" label="IMPRESION"
                        align="center" />
                    <column width="100px" label="MENSAJERIA"
                        align="center" />
                    <column width="100px" label="TOTAL" align="center" />
                </columns>
            </grid>

最初に 4 つのレコードが表示されました。正しいです。データベースには 4 つのレコードしかありません。2 回目に「一般」ボタンを押すと、8 つのレコード (4x2)inboxGrid.getRows().getChildren().clear()が表示されました。ボタンを付けてみました。それでも同じ動作を示します。

4

2 に答える 2

1

getUpdatedData(ffecha, Order, Modo)) 関数内にある必要があります。これはZKとは関係ありません。

getUpdatedData(ffecha, Order, Modo)) が返すアイテムの数を確認してください。関数は 2 回目に 8 アイテムを返すと思います。モデルを設定すると、ZK は渡されたリスト内の項目数のみを出力します。

于 2012-06-19T04:04:50.040 に答える
0

これはこれを修正する方法です!

private List<String[]> getUpdatedData(String a, String order,String modo)
        throws ClassNotFoundException {
     //This is how you clean the list for the next click
    list.clear();
    list2.clear();
    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        String conexion = "jdbc:sqlserver://" + dbhost + ":" + port
                + ";databaseName=" + db;
        Connection conn = DriverManager.getConnection(conexion, user, pwd);
        PreparedStatement stmt = null;
        stmt = conn
                .prepareStatement("Select c.CLAVE, UPPER(s.NOMBRE) AS SUCURSAL, SUM(c.PAG) as PAGINAS, COUNT(c.CLAVE) as EDO_CUENTA,  SUM(c.PAG) * "+m+"as IMPRESION, SUM(c.PAG) * "+m2+" as MENSAJERIA, (SUM(c.PAG) * 2) + (SUM(c.PAG) * 2) as TOTAL FROM Sucursal s, CORTE c where FECHA='"
                        + a
                        + "' AND s.CLAVE = c.CLAVE group by c.CLAVE, c.PAG, NOMBRE ORDER BY "
                        + order+" "+modo);
        ResultSet resultado = stmt.executeQuery();
        String clave;
        String nombre;
        Integer pag;
        Integer edo_cuenta;
        Integer impresion;
        Integer mensajeria;
        Integer total;
        if (resultado.next()) {

            do {
                clave = resultado.getString("CLAVE");
                nombre = resultado.getString("SUCURSAL");
                pag = resultado.getInt("PAGINAS");
                edo_cuenta = resultado.getInt("EDO_CUENTA");
                impresion = resultado.getInt("IMPRESION");
                mensajeria = resultado.getInt("MENSAJERIA");
                total = resultado.getInt("TOTAL");
                list2.add(clave+","+nombre+","+pag.toString()+","+edo_cuenta.toString()+","+impresion.toString()+","+mensajeria.toString()+","+total.toString());
                list.add(new String[] { clave, nombre, pag.toString(), edo_cuenta.toString(), impresion.toString(), mensajeria.toString(),total.toString() });
            } while (resultado.next());
        }
        stmt.close();
        conn.close();
        xls.setVisible(true);
        alert(list.size()+"");
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return list;
}

ご協力いただきありがとうございます!

于 2012-06-19T15:01:41.803 に答える