I'm trying to make the edit online and local mode, the error is that when editing a record not edit the correct one but another, and that is because it does not get the correct rowid just returns me:
last
that is the rowid that returns to me by console, I attach my code:
var mydata=[]
$("#grid_productosfactura").jqGrid({
data:mydata,
editurl: 'clientArray',
datatype: "local",
colModel: [
{ label: 'id_producto', name: 'id_producto', width: 15, align:'center', hidden:true},
{ label: 'id_bodega', name: 'id_bodega', width: 15, align:'center', hidden:true},
{ label: 'Codigo', name: 'codigo', width: 30, align:'left' ,key:true},
{ label: 'Producto', name: 'producto', width: 40, align:'left', cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal;"' } },
{ label: 'V.Unitario', name: 'precio', width: 20, align:'center',formatter: 'number', formatoptions: { decimalPlaces: 2 } },
{ label: 'Cantidad', name: 'cantidad', width: 20, align:'center' , editable: true, edittype:"text",
//controla solo integer
editoptions:{
size: 15, maxlengh: 15,
dataInit: function(element) {
$(element).keypress(function(e){
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
return false;
}
});
}
}
},
{ label: 'Descuento', name: 'descuento', width: 20, align:'center', editable: true, edittype:"text",
//controla solo integer
editoptions:{
size: 15, maxlengh: 15,
dataInit: function(element) {
$(element).keypress(function(e){
if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
return false;
}
});
}
}
},
{ label: 'V. Total', name: 'vtotal', width: 20, align:'center',formatter: 'number', formatoptions: { decimalPlaces: 2 } },
{ label: '<span class="badge bg-green">Acción</span>', name: "acciones", formatter: buttonFormatter, width: 25, align:'center', search: false,
sortable: false, hidedlg: true, resizable: false, editable: false, viewable: false
}
],
sortname: 'CustomerID',
sortorder : 'asc',
loadonce: true,
viewrecords: true,
width: 800,
rownumbers: true,
height: 250,
rowNum: 1000,
pager: "#pager_productosfactura",
footerrow: true,
/* EDICION LOCAL */
cellEdit: true,
cellsubmit: 'clientArray',
editurl: 'clientArray',
afterSaveCell : function(rowid,name,val,iRow,iCol) {
//data por fila jqgrid
var dataFromTheRow = jQuery('#grid_productosfactura').jqGrid ('getRowData', rowid);
console.log(dataFromTheRow);
var vunitario = dataFromTheRow.precio;
var cantidad = dataFromTheRow.cantidad;
//validar descuento
var descuento = $.trim(dataFromTheRow.descuento);
if (descuento == "" || descuento == 'undefined' ){
descuento = 0;
dataFromTheRow.descuento = 0;
}else if (parseFloat(descuento) > parseFloat(vunitario)){
swal('El descuento no puede exceder el precio de Venta !!', '', 'warning');
descuento = 0;
dataFromTheRow.descuento = 0;
}
//validar cantidad
if (cantidad == 0){
swal('La cantidad no puede ser cero !!', '', 'warning');
cantidad_real = 1;
dataFromTheRow.cantidad = 1;
}else{
dataFromTheRow.cantidad = cantidad;
cantidad_real = dataFromTheRow.cantidad;
}
//agregar nuevos datos
dataFromTheRow.vtotal = (parseFloat(vunitario) * parseFloat(cantidad_real)) - parseFloat(descuento);
$('#grid_productosfactura').jqGrid('setRowData', rowid, dataFromTheRow);
//sumar footer
var $grid = $('#modalVenta #grid_productosfactura');
var colSum = $grid.jqGrid('getCol', 'vtotal', false, 'sum');
$grid.jqGrid('footerData', 'set', { 'cantidad': 'Subtotal:' });
$grid.jqGrid('footerData', 'set', { 'vtotal': colSum });
//reset selected
$grid.jqGrid('resetSelection');
},
/*gridComplete: function() {
var $grid = $('#grid_productosfactura');
var colSum = $grid.jqGrid('getCol', 'vtotal', false, 'sum');
$grid.jqGrid('footerData', 'set', { 'vtotal' colSum });
}*/
});
This error only occurs when I have more than two rows and edit any of them always affects the first edition but not the chosen one.
Maybe a suggestion. thanks .. !!