Hola
Mira hace poco hice algo así (highlight en C++, pero es java
):
Código C++:
Ver original//clase1.java
ResultSet rs = query.executeQuery("select * from pendientes");
rs.afterLast();
Boolean seguir=rs.previous();
while(seguir){
respuesta= respuesta + rs.getString(1)+ "#" +rs.getString(2)+ "#" +rs.getString(3)+ "#" + rs.getString(4)+ "#" +rs.getString(5)+ "@";
seguir=rs.previous();
}
rs.close(); query.close(); conexion.close();
Y la respuesta era algo como esto (siguiendo a id, ip, requerimiento, archivo, fecha ):
Cita: 101#192.168.1.190#hardware#C:\infoextra.txt#2010-05-16@
El "@" es para terminar la línea, en caso que tengas más de 1.
Una vez que tenía todo el resultado, quedaba guardado en la variable respuesta, y ésta la enviaba a:
Código C++:
Ver original//clase2.java
private String respuestaXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>";
private String Pendientes(String cadena){
Boolean v=true;
try{
String [] temp = cadena.split("@");
for (String algo : temp){
String [] temp1 = algo.split("#");
if (v) {
cuerpo ="<orden id=\""+temp1[0]+"\"><ip>"+temp1[1]+"</ip>"+"<req>"+
temp1[2]+"</req><arch>"+temp1[3]+"</arch><fecha>"+temp1[4]+"</fecha></orden>";
v=false;
}else{
cuerpo =cuerpo+"<orden id=\""+temp1[0]+"\"><ip>"+temp1[1]+"</ip>"+"<req>"+
temp1[2]+"</req><arch>"+temp1[3]+"</arch><fecha>"+temp1[4]+"</fecha></orden>";
}
}
this.respuesta = "<OrdenesPendiente>"+cuerpo+"</OrdenesPendiente>";
}catch(Exception e){
this.respuestaXML = e.toString();
}
return this.respuestaXML + this.respuesta;
}
De esta forma, recorres el string hasta encontrar el "@" (para abrir un padre), y separas cada pedazo en un string menor. Haces lo mismo, pero hasta encontrar el "#" (para el hijo) y luego ya separas tal cual.
Devuelves el resultado y te queda algo así:
Código XML:
Ver original<OrdenesPendiente>
<orden id="4">
<ip>192.168.13.154</ip>
<req>Otro</req>
<arch>System.Web.DynamicData.dll</arch>
<fecha>2010-08-19</fecha>
</orden>
<orden id="5">
<ip>192.168.1.197</ip>
<req>Hardware</req>
<arch>ruta</arch>
<fecha>2010-08-23</fecha>
</orden>
</OrdenesPendiente>
Y todo esto lo llamas desde un js.
Código Javascript
:
Ver originalfunction leePendientes(){
if (oXML.readyState==4) {
try{
var xml = oXML.responseXML;
var cant = xml.getElementsByTagName('orden').length;
var respuesta = "<table id=\"pendientes\" class=\"tablesorter\" ><thead><tr><th>ID</th><th>IP</th><th>Requerimiento</th>"+
"<th>Archivo Adjunto</th><th>Fecha</th></tr></thead><tbody>";
var semiResp;
for(i=0;i<cant;i++){
var resp = "<tr>";
var id = xml.getElementsByTagName('orden').item(i).getAttribute('id');
resp = resp + "<td onClick=\"RoA("+id+")\">"+ id + "</td>";
resp = resp + "<td>"+ xml.getElementsByTagName('ip')[i].firstChild.data + "</td>";
resp = resp + "<td>"+ xml.getElementsByTagName('req')[i].firstChild.data + "</td>";
resp = resp + "<td>"+ xml.getElementsByTagName('arch')[i].firstChild.data + "</td>";
resp = resp + "<td>"+ xml.getElementsByTagName('fecha')[i].firstChild.data + "</td>";
resp = resp + "</tr>";
if (i==0) {
semiResp = resp;
}else{
semiResp = semiResp + resp;
}
}
document.getElementById('content_2').innerHTML = respuesta + semiResp + "</tboby>";
try{
$("#pendientes").tablesorter({headers: {0:{sorter: false}, 1:{sorter: false}, 3:{sorter: false}}, widgets: ['zebra']});
}catch(e){
alert(e.toString());
}
}catch (e){
alert(e.toString());
}
}else{
document.getElementById('content_2').innerHTML = '<b>Cargando..</b>';
}
}
Y listo
Es cosa que lo adaptes a lo que quieres hacer.
Para la grilla puedes usar [URL="http://tablesorter.com"]tablesorter[/URL] viendo los tutos en la misma web