2012-06-18 51 views
1

我正在使用網格和一類java將數據呈現給行,並且一切正常,數據顯示在網格中,但問題在於當您單擊第二個計算將數據呈現給網格的按鈕時,數據仍然存在,新數據將添加到行中。我使用Jboss 4.2如何清潔ZK上的網格

這是RowRender的Java Class:

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條記錄在數據庫中,th第二次按下「generar」按鈕顯示8條記錄(4x2),我嘗試將inboxGrid.getRows().getChildren().clear()放在按鈕上;但仍顯示相同的行爲。

回答

1

它必須在您的getUpdatedData(ffecha,Order,Modo)函數中。這與ZK無關。

請檢查getUpdatedData(ffecha,Order,Modo)返回的項目數量,我的猜測是該函數將第二次返回8個項目。一旦你設置了模型,ZK將只輸出傳遞給它的列表中的項目數量。

+0

你是對的! getUpdatedData返回8個項目,這是因爲將元素呈現給網格的列表是一個全局變量,我清除了列表並且一切正常。謝謝你的幫助! – AndresMontj

+0

沒問題安德烈斯,很高興我能幫助你! – Tim

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

感謝您的幫助!