2010-10-14 19 views
19

¿Cómo se puede crear una grilla pero no cargar datos?jqGrid - cómo configurar la grilla para NO cargar datos inicialmente?

Si omito la opción url, se activa la devolución de llamada loadError.

Actualmente configuramos url:NoData.json donde NoData.json es un archivo estático sin filas.

Se ha producido un problema en la devolución de llamada loadComplete en la que deseamos dipslay un mensaje si la cuadrícula no contiene datos, excepto que no queremos mostrar este mensaje en la carga inicial. Actualmente maneja esto de la siguiente manera:

//jqGrid load complete handler 
function loadComp(grid) { 
    if (grid.getGridParam("url") != "NoData.json" && grid.getGridParam("records") == 0) { 
     setStatus("Your search did not return any results"); 
    } 
} 

Esto se parece un poco hacky .. le gustaría tener sólo la red no carga información inicialmente.

¿Alguna idea?

Respuesta

31

Debería usar inicialmente datatype: 'local'. En el momento en que es necesario cargar los datos que debe cambiar el datatype a json o xml:

$("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid'); 
+0

Probé eso - el problema es con 'datatype: local' y no' url', mi llamada 'loadComplete' todavía se llama. Esperaba un enfoque que no activara la devolución de llamada, o al menos una forma más limpia en la devolución de llamada para determinar que esta es la hora inicial en que se carga la red. –

+4

@Marcus: de causa, se llamará al identificador de evento 'loadComplete' en todas las situaciones. Si solo desea mostrar un mensaje en caso de carga desde el servidor, puede mostrar el mensaje solo si 'datatype' es igual a" json ", como en http://stackoverflow.com/questions/3564898/jqgrid-programatically-select -grid-row/3571392 # 3571392 – Oleg

+2

La solución 'grid.getGridParam ('datatype') ===" json "' funcionó bien .. –

18

quería crear una cuadrícula que se carga ningún dato cuando se carga la página, pero carga datos, cuando el usuario hace clic actualizar o usa la búsqueda. Mi solución es un poco rara, pero es muy fácil y funciona bien.

Estoy utilizando el evento de devolución de llamada loadBeforeSend para detener la solicitud de datos ajax cuando se carga la página. Mi función de devolución de llamada se elimina por lo que se ejecutará solo una vez.

loadBeforeSend: function (xhr, settings) { 
    this.p.loadBeforeSend = null; //remove event handler 
    return false; // dont send load data request 
} 
+0

¿A dónde voy a votar 20 veces? –

+0

Por qué esta no es la respuesta que he usado en todas mis cuadrículas (las que no necesitan cargar) –

+0

¡Justo lo que estaba buscando, gracias! – masterwok

-2

No establezca la URL al inicializar la cuadrícula. Establezca la URL justo antes de cargar la cuadrícula usando la función setGridParam.

Funciona para mí.

Cuestiones relacionadas