Tengo un jqGrid que debe tener los botones de la radio en una columna de una fila, mientras que la edición.
La siguiente es mi código:

function BindPreclosingDocs(response) {
var previouslyselectedRow;
var preclosingtable = $('#preclosing');
preclosingtable.jqGrid({
datatype: 'jsonstring',
datastr: JSON.stringify(response.ServiceModel),
colNames: ['', 'Documents Received', 'Comments', 'SubDocument', 'NA'],
colModel: [
{ name: 'Documents', index: 'Documents', align: 'left', sortable: false, editable: false, width: 240 },
{ name: 'DocsReceived', index: 'DocsReceived', align: 'center', sortable: false, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" }, formatter: "checkbox", width: 140 },
{ name: 'Comments', index: 'Comments', align: 'center', sortable: false, editable: true, edittype: "textarea", editoptions: { rows: "3", cols: "16" }, width: 180 },
{ name: 'SubDocument', index: 'SubDocument', editable: false, width: 1 },
{ name: 'NA', index: 'NA', editable: true, formatter: 'dynamicText', width: 150, edittype: 'custom', editoptions: { custom_element: radioelem, custom_value: radiovalue} }
],
rowNum: response.ServiceModel.PreClosing.length,
pager: '#preclosingpagerdiv',
viewrecords: true,
sortorder: "asc",
sortname: 'Documents',
jsonReader: {
root: "PreClosing",
repeatitems: false,
id: 'ConfigId'
},
shrinkToFit: false,
height: 'auto',
grouping: true,
groupingView: {
groupField: ['SubDocument'],
groupColumnShow: [false],
plusicon: 'ui-icon-circle-triangle-s',
minusicon: 'ui-icon-circle-triangle-n'
},
loadComplete: function () {
HideGroupHeaders(this);                
},
onSelectRow: function (id) {
preclosingtable.jqGrid('saveRow', previouslyselectedRow, false, 'clientArray');
previouslyselectedRow = SetJQGridRowEdit(id, previouslyselectedRow, preclosingtable);
}
});
preclosingtable.setGridWidth('710');
};
//RowSelect 
function SetJQGridRowEdit(id, previousid, grid) {
if (id && id !== previousid) {
grid.jqGrid('restoreRow', previousid);
grid.jqGrid('editRow', id, true);
previousid = id;
return previousid;
}
};
//Build radio button
function radioelem(value, options) {
var receivedradio = '<input type="radio" name="receivednaradio" value="R"';
var breakline = '/>Received<br>';
var naradio = '<input type="radio" name="receivednaradio" value="N"';
var endnaradio = '/>NA<br>';
if (value == 'Received') {
var radiohtml = receivedradio + ' checked="checked"' + breakline + naradio + endnaradio;
return radiohtml;
}
else if (value == 'NA') {
var radiohtml = receivedradio + breakline + naradio + ' checked="checked"' + endnaradio;
return radiohtml;
}
else {
return receivedradio + breakline + naradio + endnaradio;
}
};
function radiovalue(elem, operation, value) {
if (operation === 'get') {
return $(elem).val();
} else if (operation === 'set') {
if ($(elem).is(':checked') === false) {
$(elem).filter('[value=' + value + ']').attr('checked', true);
}
}
};

mi formateador y unformatter código es el siguiente

dynamicText: function (cellvalue, options, rowObject) {
if (cellvalue == 'R') {
return 'Received';
}
else if (cellvalue == 'N') {
return 'NA';
}
else {
return '';
}
}
$.extend($.fn.fmatter.dynamicText, {
unformat: function (cellValue, options, elem) {
debugger;
var text = $(elem).text();
return text === '&nbsp;' ? '' : text;
}
});

Problema que estoy teniendo es que cuando seleccione una fila y echa un botón de editar no incendio en radiovalue función. Que los incendios se obtiene en radiovalue función, mientras que la creación de botón de radio cuando se selecciona una fila. Cualquier ayuda para que yo pueda establecer un valor para el radio botón?!

Gracias

InformationsquelleAutor fcmaine | 2013-03-28

1 Comentario

  1. 3

    Creo que tienes razón. Hay diferencia en el uso de custom_value de devolución de llamada en diferentes modos de edición.

    Si el formulario se utiliza la edición y algunas columna editable ha edittype: 'custom' luego la primera a la custom_element función (en tu caso es radioelem función) será llamado en el interior de $.jgrid.createEl. Luego custom_value será llamado, además, en el caso de rowid !== "_empty" (no para Agregar formulario). Ver las líneas de código para más detalles.

    El problema es que custom_element ha value parámetro. Así se puede establecer el valor en el control personalizado y llame a custom_element y de llamada adicionales de custom_value con "set" no es realmente necesaria.

    Otro de los modos de edición (edición en línea y edición de celdas) acaba de crear un control personalizado. La devolución de llamada custom_value nunca será llamado con "set" parámetro.

    Confirmo que la documentación sobre control personalizado es demasiado corto. Supongo que sólo se puede quitar la parte de su código radiovalue por parte 'set'. Creo que el siguiente código de buen trabajo (incluso en el caso de edición de formulario):

    function radiovalue(elem, operation, value) {
    if (operation === 'get') {
    return $(elem).val();
    }
    }

    Una observación: Si usted va a tratar el uso de controles personalizados que usted debe no olvides usar recreateForm: true opción. Como un ejemplo de uso del control personalizado en la edición en línea, formulario de edición y búsqueda encontrará aquí. La referencia a la demo que se encuentra en la respuesta.

    • Gracias Oleg para la respuesta. No estoy usando el formulario edititng aquí. Estoy editando una fila en la línea de seleccionar la fila. El problema que estoy teniendo es que, una vez que seleccione una fila, me sale el grupo de botones de radio. Ahora me seleccione el segundo botón de radio con el valor de ‘N’. Cuando seleccione otra fila, como hago para guardar clientArray, espero que la ha editado anteriormente fila de la columna a la actualización de NA columnas de valor a NA. Pero lo actualiza como «Recibidos». Se actualiza a ‘Recibido’ incluso cuando no se selecciona ninguna opción de botones de radio.
    • Usted es bienvenido! Su pregunta fue: «¿por qué personalizados elemento de no despedir establecer evento en» editar». Me respondió que es despedido sólo en la forma de edición. Lo que pides en tu último comentario es nueva pregunta. Supongo que usted tiene algunos problemas, ya que llamar a restoreRow en lugar de saveRow o simplemente porque utiliza el botón de radio en el modo de edición en lugar de uso de formateador personalizado. Para entender el problema, usted debe publicar nueva pregunta con datos de prueba y donde se describe detallada del caso de prueba, los resultados esperados y los resultados de la demostración.
    • También he añadido el código de ejemplo en jsfiddle en enlace
    • La demo que tiene muchos problemas. Usted debe a la aplicación de la costumbre de los controles de edición y, probablemente, el formateador personalizado también. Es mejor si usted abra nueva pregunta porque todo lo que el problema no tiene nada en común con el original de su pregunta acerca de cómo llamar a custom_value con "set" parámetro. La idea principal de los cambios que usted necesita hacer se puede ver aquí. Los comentarios serán no se utiliza por el motor de búsqueda. Así que para ayudar a la gente con el mismo problema que usted debe abrir nueva pregunta.
    • Gracias de nuevo. La adición de <span> y ‘saveRow’ en lugar de ‘restoreRow» de su demo a mi me funciono perfectamente. Puedo obtener los datos de un servicio y no local y Como me pasó a implementar jqGrid en jsFiddle, he hecho algunos errores, como yo lo estaba mirando lo que tengo y volver a crear con los datos: local. Me marca esto como respuesta, como es apropiado para la pregunta que le hice en ese momento. Voy a abrir una nueva pregunta y punto aquí y su demo como una respuesta.
    • Usted es bienvenido! La razón de dividir a los diferentes problemas en diferentes preguntas es el objetivo de ayudar a otra gente con el mismo problema. Motor de búsqueda no puede buen índice acumulado de las preguntas. Pero la más importante es que se solucionó su problema ahora. Enhorabuena!

Dejar respuesta

Please enter your comment!
Please enter your name here