template mvc kendo kendo-ui kendo-grid

kendo-ui - mvc - kendo tooltip events



Actualiza una sola fila de rejilla Kendo (3)

Encontré una manera de actualizar la grilla dataSource y mostrar en la grilla sin actualizar toda la grilla. Por ejemplo, tiene una fila seleccionada y desea cambiar el valor de "nombre" de la columna.

//the grid var grid = $(''#myGrid'').data(''kendoGrid''); // Access the row that is selected var row = grid.select(); //gets the dataItem var dataItem = grid.dataItem(row); //sets the dataItem dataItem.name = ''Joe''; //generate a new row html var rowHtml = grid.rowTemplate(dataItem); //replace your old row html with the updated one row.replaceWith(rowHtml);

¿Hay alguna manera de actualizar una única fila de la red Kendo sin actualizar toda la fuente de datos o usar jQuery para establecer el valor de cada celda?


¿Cómo defines la fila que quieres actualizar? Voy a suponer que es la fila que ha seleccionado, y el nombre de la columna que se está actualizando es symbol .

// Get a reference to the grid var grid = $("#my_grid").data("kendoGrid"); // Access the row that is selected var select = grid.select(); // and now the data var data = grid.dataItem(select); // update the column `symbol` and set its value to `HPQ` data.set("symbol", "HPQ");

Recuerde que el contenido del DataSource es un objeto observable , lo que significa que puede actualizarlo utilizando el set y el cambio debe reflejarse mágicamente en la grid .


data.set realmente actualizará toda la grilla y enviará un evento de datos en algunos casos. Esto es muy lento e innecesario. También colapsará cualquier plantilla de detalle expandido que no sea ideal.

Te recomendaría usar esta función que escribí para actualizar una sola fila en una grilla de kendo.

// Updates a single row in a kendo grid without firing a databound event. // This is needed since otherwise the entire grid will be redrawn. function kendoFastRedrawRow(grid, row) { var dataItem = grid.dataItem(row); var rowChildren = $(row).children(''td[role="gridcell"]''); for (var i = 0; i < grid.columns.length; i++) { var column = grid.columns[i]; var template = column.template; var cell = rowChildren.eq(i); if (template !== undefined) { var kendoTemplate = kendo.template(template); // Render using template cell.html(kendoTemplate(dataItem)); } else { var fieldValue = dataItem[column.field]; var format = column.format; var values = column.values; if (values !== undefined && values != null) { // use the text value mappings (for enums) for (var j = 0; j < values.length; j++) { var value = values[j]; if (value.value == fieldValue) { cell.html(value.text); break; } } } else if (format !== undefined) { // use the format cell.html(kendo.format(format, fieldValue)); } else { // Just dump the plain old value cell.html(fieldValue); } } } }

Ejemplo:

// Get a reference to the grid var grid = $("#my_grid").data("kendoGrid"); // Access the row that is selected var select = grid.select(); // and now the data var data = grid.dataItem(select); // Update any values that you want to data.symbol = newValue; data.symbol2 = newValue2; ... // Redraw only the single row in question which needs updating kendoFastRedrawRow(grid, select); // Then if you want to call your own databound event to do any funky post processing: myDataBoundEvent.apply(grid);