2012-06-13 14 views
6

Estoy trabajando con jqGrid 4.3.2 en un sitio web de ASP.NET MVC 4, jQuery 1.7.2. Hay varios lugares en la aplicación donde se usa jqGrid. Mi configuración general en este momento es que toda la edición se realiza localmente (loadonce: true y clientArray) con navegación y edición en línea, y todos los datos de la cuadrícula se publican en el servidor en el formulario enviado a través de llamadas AJAX. Me he encontrado con algunas dificultades con las ediciones de fila y en qué eventos están comprometidos. Puede ver el sitio (y la fuente, el trabajo total en progreso, sea agradable) here. Si agrega o edita una fila y luego hace clic en algún otro lugar de la página, la edición de la fila no se guarda. El usuario debe presionar la tecla Intro en algún lugar durante la edición de la fila para guardar la fila.jqGrid no guarda las ediciones de fila en línea

He tocado esto un poco en this question, que Oleg tuvo la amabilidad de responder. ¿Hay alguna forma de confirmar una edición de fila que no sea cuando se presiona la tecla Intro, como cuando la fila pierde el foco, tal vez?

Respuesta

8

Lo que puede hacer es la siguiente:

  1. En primer lugar hay que establecer restoreAfterSelect: false opción de inlineNav. Veo que la opción no está documentada, pero puede verla en the source code. Sin la configuración inlineNav usa beforeSelectRow para llamar al restoreRow (ver here).
  2. Implemente el guardado de la fila de edición anterior dentro de onSelectRow (vea el código de the answer) o dentro de beforeSelectRow. Probablemente el uso de beforeSelectRow sea aún más fácil porque la última fila de edición, que debe guardarse, podría ser solo la última fila seleccionada que puede obtener desde la opción selrow porque el valor aún no ha cambiado dentro de beforeSelectRow.
+0

¡Perfecto! Gracias, Oleg. Eso me ha estado molestando por un tiempo. –

+0

@AJ .: ¡De nada! – Oleg

+0

Oleg a pesar de que han pasado más de 2 años, su respuesta todavía me ayudó. poner "restoreAfterSelect: false" fue la clave. gracias –

1

Para cualquiera que lea esto en 2016, esta funcionalidad se ha incorporado a jqGrid. Ver https://github.com/tonytomov/jqGrid/issues/785. En el momento de escribir jqGrid 5.1 estaba fuera, por lo que espero que esta funcionalidad esté disponible desde la versión 5.2 en adelante. Como alternativa, solo obtenga el código más reciente de GitHub.

Para usarlo basta con establecer las siguientes propiedades en su jqGrid:

... 
restoreAfterSelect: false, 
saveAfterSelect: true, 
... 

Ya no existe la necesidad de implementar su propia solución.

Cuestiones relacionadas