2012-06-18 3 views
1

Я использую сетку и класс java для визуализации данных в строках, и все работает нормально, данные отображаются в сетке, но проблема заключается в том, когда вы нажимаете на вторую время, которое отображает данные в сетке, данные все еще там, и новые данные добавляются в строки. Я использую Jboss 4.2Как очистить сетку от ZK

Это 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 класса Listener:

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

Это GRID в index.zul

<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 записи, thats correct, всего 4 записей в базе данных, th e второй раз, когда нажата кнопка «Generar», отображено 8 записей (4x2), я пытаюсь поставить inboxGrid.getRows().getChildren().clear() на кнопку; но все еще демонстрирует такое же поведение.

ответ

1

Он должен быть в вашей функции getUpdatedData (ffecha, Order, Modo)). Это не связано с ZK.

Пожалуйста, проверьте количество элементов, которые получаютUpdatedData (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; 
} 

Спасибо за вашу помощь!

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