如何在ZK上清理网格

时间:2012-06-18 22:16:16

标签: java grid rendering zk

我正在使用网格和一类java将数据呈现给行,一切正常,数据显示在网格中,但问题是当您第二次单击呈现数据的按钮时到网格,数据仍在那里,新数据被添加到行中。我正在使用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条记录,第二次按下“generar”按钮显示8条记录(4x2),我尝试将inboxGrid.getRows().getChildren().clear()放在按钮;但仍然表现出相同的行为。

2 个答案:

答案 0 :(得分:1)

它必须在您的getUpdatedData(ffecha,Order,Modo))函数中。这与ZK无关。

请检查getUpdatedData(ffecha,Order,Modo))返回的项目数,我的猜测是该函数将第二次返回8项。设置模型后,ZK只会输出传递给它的列表中的项目数。

答案 1 :(得分: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;
}
  

感谢您的帮助!