¿Cómo pasar parámetros adicionales para la edición de filas/salvar acción en free-jqgrid?
Tengo un jgrid y el código está abajo. Deseo enviar algunos parámetros adicionales al servidor cuando haga clic en el icono guardar en cada fila. ¿Cómo hacer esto?
let colNames = ['Designation', 'No. of Resource(s) Required', 'Competence for Job', 'Skill of Resource', 'Time Required(in %)', 'From', 'To', 'Reason For Request', 'Assigned Person(s)', 'Current Role in Project', 'resource_type', 'Billing'];
let colModel = [
{name:'resource_designation', index:'resource_designation', resizeable:true, editable: true, edittype: 'select', editoptions: {value:designation_options}, editrules:{required:true}, search: false},
{name:'resource_resources_required', index:'resource_resources_required', resizeable:true, editable: true, edittype: 'text', editrules:{required:true}, search: false},
{name:'resource_competence_for_job', index:'resource_competence_for_job', resizeable:true, editable: true, edittype: 'textarea', search: false},
{name:'resource_skill_of_resource', index:'resource_skill_of_resource', resizeable:true, editable: true, edittype: 'textarea', search: false},
{name:'resource_percentage_time_required', index:'resource_percentage_time_required', resizeable:true, editable: true, edittype: 'text', editrules:{required:true, integer: true}, search: false},
{name:'resource_duration_from', index:'resource_duration_from', resizeable:true, editable: true, edittype: 'text', editoptions: {
dataInit: function(el){
$(el).datepicker({
id: 'resource_duration_from',
dateFormat: "dd-M-yy"
});
}
}, search: false},
{name:'resource_duration_to', index:'resource_duration_to', resizeable:true, editable: true, edittype: 'text', editoptions: {
dataInit: function(el){
$(el).datepicker({
id: "resource_duration_to",
dateFormat: "dd-M-yy"
});
}
}, search: false},
{name:'resource_reason_for_request', index:'resource_reason_for_request', resizeable:true, editable: true, edittype: 'text', editrules:{required:true}, search: false},
//{name:'assigned_persons', index:'assigned_persons', resizeable:true, editable: true, edittype: 'select', editrules:{required:true}, search: false},
{name:'resource_assigned_persons', index:'resource_assigned_persons', resizeable:true, editable: true, edittype: 'select', editoptions:{value:assigned_persons}, editrules: {required: true}, search: false},
//{name:'current_role', index:'current_role', resizeable:true, editrules:{required:true}, search: false},
{name:'resource_current_role_in_project', index:'resource_current_role_in_project', resizeable:true, editable: true, edittype: 'select', editoptions: {value: designation_options}, editrules:{required:true}, search: false},
{name:'resource_resource_type', index:'resource_resource_type', resizeable:true, editable: true, edittype: 'select', editoptions: {value: {"Full Time": "Full Time", "Buffer": "Buffer", "Trainee": "Trainee"}}, editrules:{required:true}, search: false},
{name:'resource_billing', index:'resource_billing', resizeable:true, editable:true, edittype:'select', editoptions: {value:{"Billable": "Billable", "Non-Billable": "Non-Billable"}}, search: false}
];
let editparameters = {
"keys" : false,
"oneditfunc" : null,
"successfunc" : null,
"url" : location_url,
"extraparam" : {"grid": "rsf_people"},
"aftersavefunc" : null,
"errorfunc": null,
"afterrestorefunc" : null,
"restoreAfterError" : true,
"mtype" : "POST"
};
let parameters = {
edit: true,
editicon: "ui-icon-pencil",
add: true,
addicon:"ui-icon-plus",
save: true,
saveicon:"ui-icon-disk",
cancel: true,
cancelicon:"ui-icon-cancel",
//addParams : saveparameters,
addParams : {addRowParams:{extraparam:{"grid":"rsf_people"}}},
editParams : editparameters
};
$("#rsf_people").jqGrid({
url: location_url,
datatype: "json",
mtype: "POST",
postData: {action: "get_saved_allocated_resources"},
colNames:people_colNames,
colModel:people_colModel,
rowNum: 5,
height:'auto',
autowidth: true,
shrinkToFit: true,
pager: true,
emptyrecords: " ",
viewrecords: true,
sortorder: "asc",
scrollOffset:0,
cmTemplate: { autoResizable: true, editable: true },
autoResizing: { compact: true, resetWidthOrg: true },
idPrefix: "g1_",
autoencode: true,
sortable: true,
rownumbers: true,
pagerRightWidth: 150,
editurl: location_url,
afterAddRow: function () {
recreateFilterToolbar.call(this);
},
afterSetRow: function () {
recreateFilterToolbar.call(this);
},
afterDelRow: function () {
recreateFilterToolbar.call(this);
},
inlineEditing: {
keys: true
},
formEditing: {
width: 310,
closeOnEscape: true,
closeAfterEdit: true,
savekey: [true, 13]
},
loadonce: true,
caption: "RSF People",
}).jqGrid("navGrid", {add: false, edit: false, del: false, search: false, refresh: false})
.jqGrid("inlineNav", parameters)
.jqGrid("filterToolbar");
/* To make grouped headers */
$("#rsf_people").jqGrid("setGroupHeaders", {
useColSpanStyle: false,
groupHeaders: [
{startColumnName: 'duration_from', numberOfColumns: 2, titleText: 'Duration'},
]
});
Y mi rejilla parece abajo,
Si miras la imagen he marcado las acciones inlinenav como añadir y editar en verde. Así que estos funcionan bien y soy capaz de pasar parámetros adicionales usando la variable parámetros.
Pero quiero pasar esos mismos parámetros adicionales a la acción de edición marcada en rojo rectángulo en la imagen. ¿Cómo puedo hacer eso?
Para ponerlo de otra manera, cuando haga clic en el icono "+" en el verde área inferior añade una nueva fila a la cuadrícula y también un icono de ahorro al lado izquierdo de la fila[la columna de acción]. Si relleno los datos y haga clic en el icono guardar en la misma fila izquierda no pasa los parámetros adicionales al servidor. ¿Cómo puedo lograr esto? Deseo pasar parámetros adicionales cuando el ahorro[existe en cada fila - marcado en rojo en la imagen] icono se hace clic.
¿Cómo lograr esto? ¡Por favor, ayúdame!
Pregunta hecha hace 3 años, 4 meses, 27 días - Por pixelpioneer
3 Respuestas:
-
Si entiendo correctamente su código que desea enviar
grid=rsf_people
como datos extra sobre el ahorro de datos en línea en caso de operación "add" y "edit". En la actualidad se estableceextraparam
sólo parainlineNav
. Así que los datos extra serán enviados en caso de uso "salvar" icono en la barra de navegación solamente y no en formador de "acción".Soportes jqGrid gratis
inlineEditing
parámetro (seeinlineEditing: { keys: true }
en su código), que simplifica los parámetros de reenvío a los métodos de edición en línea. Te sugiero que uses.inlineEditing: { extraparam: { grid: "rsf_people" }, mtype: "POST", keys: true }
Debería resolver tu problema. See el artículo wiki para más detalles.
Respondida el Dec 18, 2020 a las 10:07 - por bytebard66b1
Votos positivos: 0 | Votos negativos: 0 -
Para poder pasar parámetros adicionales a la acción de guardar en cada fila en jqGrid, necesitarás modificar la configuración de la edición en tu código.
En tu código, ya has definido los parámetros adicionales que deseas enviar al servidor en la variable
editparameters
. Ahora, necesitas adjuntar estos parámetros a la configuración de la acción de guardar en cada fila.Puedes hacerlo de la siguiente manera:
- Agrega la siguiente función a tu código:
javascript function saveRow(rowid, result) { let saveparameters = { "keys" : true, "oneditfunc" : null, "successfunc" : null, "url" : locationurl, "extraparam" : {"grid": "rsfpeople"}, // Parámetros adicionales que deseas enviar "aftersavefunc" : null, "errorfunc": null, "afterrestorefunc" : null, "restoreAfterError" : true, "mtype" : "POST" };
return saveparameters; }
- Luego, cuando inicialices tu jqGrid, agrega la siguiente configuración para la acción de guardar en cada fila:
javascript let parameters = { edit: true, editicon: "ui-icon-pencil", add: true, addicon:"ui-icon-plus", save: true, saveicon:"ui-icon-disk", cancel: true, cancelicon:"ui-icon-cancel", saveParams: saveRow, // Agrega la función saveRow como configuración para la acción de guardar en cada fila editParams: editparameters };
Con estos cambios, cada vez que hagas clic en el icono guardar en una fila, se enviarán los parámetros adicionales definidos en
editparameters
al servidor. ¡Espero que esta información te haya sido útil! Si tienes alguna otra duda, ¡estaré encantado de ayudarte!Respondida el Dec 19, 2020 a las 10:05 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para pasar parámetros adicionales a la acción de edición en cada fila, puedes utilizar la propiedad
editParams
del objetoinlineEditing
y configurarla para cada fila individualmente. Aquí tienes un ejemplo:inlineEditing: { keys: true, editParams: function (rowid) { // Obtener los datos de la fila actual var rowData = $("
rsf_people").jqGrid('getRowData', rowid); // Crear un objeto con los parámetros adicionales var extraParams = { "grid": "rsf_people", "rowid": rowid }; // Devolver los parámetros adicionales return { "extraparam": extraParams }; } }En este ejemplo, la propiedad
editParams
es una función que devuelve un objeto con los parámetros adicionales que deseas pasar al servidor. La funcióngetRowData
se utiliza para obtener los datos de la fila actual y elrowid
se pasa como parámetro a la funcióneditParams
.También puedes utilizar la propiedad
afterSavefunc
para ejecutar una función después de que se haya guardado una fila. Esta función puede utilizarse para realizar cualquier procesamiento adicional que necesites, como enviar los parámetros adicionales al servidor. Aquí tienes un ejemplo:afterSavefunc: function (rowid, response) { // Obtener los datos de la fila actual var rowData = $("
rsf_people").jqGrid('getRowData', rowid); // Crear un objeto con los parámetros adicionales var extraParams = { "grid": "rsf_people", "rowid": rowid }; // Enviar los parámetros adicionales al servidor $.ajax({ url: location_url, type: "POST", data: extraParams, success: function (data) { // Procesar la respuesta del servidor } }); }En este ejemplo, la propiedad
afterSavefunc
es una función que se ejecuta después de que se haya guardado una fila. La funcióngetRowData
se utiliza para obtener los datos de la fila actual y elrowid
se pasa como parámetro a la funciónafterSavefunc
. La función$.ajax
se utiliza para enviar los parámetros adicionales al servidor.Respondida el Dec 19, 2020 a las 10:08 - por Gemini
Votos positivos: 0 | Votos negativos: 0