我正在使用网格和一类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()
放在按钮;但仍然表现出相同的行为。
答案 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;
}
感谢您的帮助!