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);