dojo dojox.grid dojox.grid.datagrid

dojo - Cómo actualizar la cuadrícula de datos



dojox.grid dojox.grid.datagrid (6)

El siguiente fragmento de código se puede usar para actualizar la cuadrícula:

var newStore = new dojo.data.ItemFileReadStore({data: {... some new data ...}); var grid = dijit.byId("gridId"); grid.setStore(newStore);

EDITAR:

Guía de referencia de la cuadrícula de datos de Dogo (ejemplo de agregar / eliminar filas, actualizar ejemplos de datos de cuadrícula)

Creo dojox.grid.datagrid y relleno el contenido de la matriz como en el ejemplo último ejemplo en la página . Durante el tiempo, cambio el valor de esa matriz en el código. ¿Cómo refrescar el contenido de esa grilla? ¿Cómo cargar nuevos datos desde la matriz modificada?


Para cambiar los valores en la grilla, necesitará cambiar el valor en la tienda de la grilla. Los datos de la cuadrícula están vinculados a los datos de la tienda, y la cuadrícula se actualizará según sea necesario.

Entonces la clave es entender la API de datos de Dojo y cómo funcionan las tiendas en Dojo. En lugar de manipular los datos directamente en la cuadrícula, manipúlelos en la tienda.

Idealmente, la tienda es tu matriz que manipulas mientras se ejecuta la aplicación y no deberías necesitar sincronizar la matriz a la grilla. Simplemente use ItemFileWriteStore como su titular de datos a menos que eso no sea posible.

Además, el uso de la API de identidad de datos dojo hace que sea muy sencillo encontrar elementos en la cuadrícula si eso es posible. Suponiendo que sabe cuándo se actualiza, elimina o cambia un elemento en su aplicación, debe poder modificar el almacén de cuadrícula según sea necesario cuando ocurra la acción. Este es definitivamente el enfoque preferido. Si no puede hacer eso, tendrá que hacer una búsqueda general y utilizar la devolución de llamada en conjunto para sincronizar manualmente sus matrices, que serán muy lentas y no se escalarán bien, en cuyo caso también puede crear una nueva tienda. juntos y asígnelos a la grilla con grid.setStore (myNewStore)

Aquí hay un violín con una operación básica de creación, actualización y eliminación: http://jsfiddle.net/BC7yT/11/

Todos estos ejemplos aprovechan la declaración de una identidad al crear la tienda.

var store = new dojo.data.ItemFileWriteStore({ data: { identifier : ''planet'', items: itemList } });

ACTUALIZAR UN ARTÍCULO EXISTIENTE:

//If the store is not in your scope you can get it from the grid var store = grid.store; //fetchItemByIdentity would be faster here, but this uses query just to show //it is also possible store.fetch({query : {planet : ''Zoron''}, onItem : function (item ) { var humans = store.getValue(item, ''humanPop''); humans += 200; store.setValue(item, ''humanPop'', humans); } });

INSERTAR UN NUEVO ARTÍCULO:

store.newItem({planet: ''Endron'', humanPop : 40000, alienPop : 9000}); } catch (e) { //An item with the same identity already exists }

ELIMINAR UN ARTÍCULO:

store.fetchItemByIdentity({ ''identity'' : ''Gaxula'', onItem : function (item ) { if(item == null) { //Item does not exist } else { store.deleteItem(item); } }});


con esto puedo actualizar una fila específica. este ejemplo es para una red de árbol

var idx = this.treeGrid.getItemIndex(item); if(typeof idx == "string"){ this.treeGrid.updateRow(idx.split(''/'')[0]); }else if(idx > -1){ this.treeGrid.updateRow(idx); }


(Supongo que ya tienes una grilla en funcionamiento y quieres cambiar completamente la tienda de la grilla)

  1. Crea un nuevo almacén de datos con tu nuevo valor:

    dataStore = new ObjectStore({ objectStore:new Memory({ data: data.items }) });

    (los datos son la respuesta de una solicitud de Ajax para mí)

  2. Cambia la tienda de tu grilla con la nueva:

    grid.store = dataStore;

  3. Render:

    grid.render();


Esto actualizará Grid Store y actualizará la Vista de la Grilla en la última versión de Dojo 1.9

grid.store = store; grid._refresh();


Tenía un EnhancedGrid filtrado en el lado del servidor, que estaba refrescando felizmente al cambiar la tienda, y se muestra en las otras respuestas.

Sin embargo, tuve otra EnhancedGrid que no se actualizaría cuando se aplicara un filtro. Puede haber tenido que ver con el hecho de que fue filtrado por el lado del cliente (pero los datos aún provienen del servidor que usa la tienda JsonRest), pero realmente no sé la causa. Eitherway, la solución fue refrescar con el siguiente código:

grid.setFilter(grid.getFilter());

Es raro y extraño, pero si todo lo demás falla ...