jquery - bootstrap - Actualización de datos locales de jqGrid(objeto JSON)
jqgrid github (6)
Lo siguiente me funciona cuando actualizo los datos en una cuadrícula existente:
var gridData = [...];
var grid = jQuery(''#gridId'');
grid.jqGrid(''clearGridData'');
if( grid.get(0).p.treeGrid ) {
grid.get(0).addJSONData({
total: 1,
page: 1,
records: gridData.length,
rows: gridData
});
}
else {
grid.jqGrid(''setGridParam'', {
datatype: ''local'',
data: gridData,
rowNum: gridData.length
});
}
grid.trigger(''reloadGrid'');
Tuve que hacerlo de esta manera porque las llamadas reloadGrid () rellenan (), populate () llama a addLocalData () y pasan el valor de retorno a addJSONData (), pero para treeGrid == true, addLocalData () no devuelve nada, y addJSONData () posteriormente no hace nada.
Estoy tratando de usar jqGrid con datos locales y estoy encontrando un par de problemas:
Estoy inicializando la cosa así:
function refreshGrid($grid, results)
{
$grid.jqGrid({
data: results,
datatype: "local",
colNames:[''#'',''File'', ''Category'', ''Line Number'', ''Message Text'',''Detailed''],
colModel:[
{name:''count'',index:''count'', width:100, resizable: true},
{name:''basename'',index:''basename'', width:100, resizable: true, classes:[''basename'']},
{name:''category'',index:''category'', width:60, resizable: true},
{name:''linenumber'',index:''linenumber'', width:60, resizable: true},
{name:''text'',index:''text'',width:400, resizable: true},
{name:''detailed'',index:''detailed'',width:100,classes:[''detailed''], resizable: true }
],
viewrecords: true,
rowNum:100,
rowList:[100,200],
pager: ''#debug_errors_pager'',
caption:"JSON Example"
});
}
Los datos que estoy transmitiendo, los results
son una matriz de objetos.
Cuestiones:
1) El localizador está totalmente apagado. Muestra el recuento correcto, pero en realidad no me permite hojear los datos.
2) No puedo actualizar los datos. Estoy usando mi propia función de búsqueda para llegar a mis results
. No puedo averiguar cómo actualizar los datos existentes. La cuadrícula se inicializa la primera vez. En intentos posteriores, se inicializa en una tabla vacía.
3) He intentado cosas como:
$grid.empty()
: no funciona porque el objeto $ grid está decorado con jqgrid. Estoy tratando de "destruir" la cuadrícula antigua y simplemente volver a renderizarla como solución alternativa. `$ grid.trigger (''reloadGrid'') - No funciona, no sé por qué.
Nota: esto está utilizando jQGrid 3.7.
No he encontrado una buena forma documentada de actualizar los datos locales de jqGrid, aquí es cómo extendí jqGrid para resolver mi problema:
$.extend($.fn.jqGrid, { setData: function(data) {
this[0].p.data = data;
return true;
} } );
Después de esto, puede hacer lo siguiente para actualizar jqGrid con nuevos datos:
Supongamos que su cuadrícula fue declarada así:
jQuery("#list").jqGrid({ datatype: "local", ... other params ... });
entonces puedes hacer
jQuery("#list").jqGrid(''setData'', array_with_new_data);
jQuery("#list").trigger("reloadGrid");
PS ver el enlace sobre cómo recuperar todos los datos de la cuadrícula Recuperar el contenido de la cuadrícula
Pregunta 1:
Si hemos definido un buscapersonas para la cuadrícula con datos del lado del cliente, los botones en buscapersonas se desactivan automáticamente. En otras palabras, la versión actual de grid no admite la búsqueda y la búsqueda del lado del cliente.
Pregunta 2: ¿Has probado?
$("#list").GridUnload();
Consulte here las diferencias entre gridUnload()
y trigger(''reloadGrid'')
.
Pude lograr algo similar. El truco para mi problema era borrar los datos antes de actualizar el parámetro de la cuadrícula de datos. Suponiendo que su cuadrícula se inicialice en otro lugar (con el tipo de datos: ''local''), intente:
function refreshGrid($grid, results) {
$grid.jqGrid(''clearGridData'')
.jqGrid(''setGridParam'', { data: results })
.trigger(''reloadGrid'', [{ page: 1}]);
}
Puedes usar simple:
jQuery("#list")
.jqGrid(''setGridParam'',
{
datatype: ''local'',
data:mydata
})
.trigger("reloadGrid");
Si está utilizando datos locales, debe mencionar sus datos json
locales en la propiedad setGridParam
jQuery("#list")
.jqGrid(''setGridParam'', {
datatype: ''local'',
data:results //json object
});
Para recargar el jqgrid
puedes usar lo siguiente.
jQuery("#list").trigger("reloadGrid");