1

我正在使用网格和 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()按钮;但仍然表现出相同的行为。

4

2 回答 2

1

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

请检查 getUpdatedData(ffecha, Order, Modo)) 返回的项目数,我猜该函数第二次会返回 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 回答