estoy usando jqgrid para mostrar datos estoy utilizando el "Grid as Subgrid".
Quiero que con un botón de una fila del Grid principal se añada una nueva fila al final del subgrid que corresponde.
En teoría esto debería llevar a cabo el trabajo:
[Añadir botón a cada fila de Grid principal]
Código Javascript :
gridComplete: function() { var ids = jQuery("#" + MAINGRIDID).jqGrid('getDataIDs'); var idsLength = ids.length; for (var i = 0; i < idsLength; i++) { var cl = ids[i]; ad = "<input style='height:22px;width:20px;' type='button' value='+' onclick=\"addNewRowToMainGrid('" + cl + "');addNew();\" />"; jQuery("#table").jqGrid('setRowData', ids[i], { act: ad }); } },
[La función que ejecuta el botón]
Código Javascript :
function addNewRowToMainGrid(id) { // 1.- Expand his subgrid var myGrid = jQuery("#"+MAINGRIDID).jqGrid('expandSubGridRow', id ); var mySubGrid = jQuery("#" + subGridId); //var rowCount = mySubGrid.getGridParam('reccount'); // 2.- Add New row to subgrid if (myGrid.length && mySubGrid2.length) { var datarow = { act: "", ObjetivoNombre: "", TipoObjetivo: "", ObjetivoTipo1: "", ObjetivoTipo2: "", ObjetivoTipo3: "", Autoevaluacion: "", ResultadoFinal: "" }; var newRowID = 'newrow' + id + 1 if (mySubGrid.length) { if (mySubGrid.addRowData(newRowID, datarow, 'last')) { mySubGrid.editRow(newRowID, true); } } } }
La función lanza un expad para mostrar el Grid y hace un addRowData al subgrid. El problema es que ignora el parámetro 'last'. Podéis ver una línea comentada que coge el número de filas. Esta linea me devuelve 0 y creo que aquí está el problema. Es como si el subgrid no estuviera cargado y por tanto no puede posicionar bien la nueva fila (siempre me la pone en la primera fila).
Si pulso 2 veces el botón, en la segunda pasada por la función ya tenemos expandido el subgrid de antes y entonces sí me hace un Add bien posicionado y el cuenta las filas bien.
Soy bastante nuevo en JS/JQuery/JQGrid y no sé bien como actuar, no sé si hay algo que pueda "refrescar" los datos inmediatamente después de hacer el expand o bien hay una manera de "llamar 2 veces a la función" .
Alguna idea?
