2011-10-30 16 views
5

El botón Agregar barra de herramientas se usa para agregar una nueva fila a jqgrid. Agregar formulario que aparece contiene todos los archivos vlaues vacíos. ¿Cómo establecer valores de campo de formulario de adición a partir de valores de columna de la fila que era actual/seleccionada cuando se emitió el comando de agregar? json datos remotos se utilizan. O, si esto es más simple, ¿cómo llamar al método del servidor para pasar la fila actual/seleccionada para recuperar los valores predeterminados para agregar el formulario del servidor?Cómo establecer valores de campo predeterminados para agregar formulario en jqgrid desde la fila actual

jqgrid contiene también columnas ocultas. Si es posible, los valores de columnas ocultas de la fila actual también se enviarán para agregar controlador si se guarda el formulario de agregar.

actualización

He intentado utilizar Oleg gran sugerencia mediante el uso de

  afterShowForm: function(formID) { 
      var selRowData, 
       rowid = grid.jqGrid('getGridParam', 'selrow'); 
      if (rowid === null) { 
      // todo: how to cancel add command here 
      alert('Please select row'); 
      return; 
      } 

      selRowData = grid.jqGrid('getRowData', rowid); 
      if (selRowData === null) { 
      alert('something unexpected happened'); 
      return; 
      } 

      $('#' + 'Baas' + '.FormElement', formID).val(selRowData.Baas); 
      } 

aplicación mantiene añadir forma abierta después de guardar. Después del primer guardado, el campo Baas está vacío. Parece que el evento afterShowForm se ejecuta solo una vez, no después de cada guardado. ¿Cómo arreglar esto para que se puedan agregar varias filas con valores predeterminados sin cerrar el formulario agregar? Cómo cancelar o no permitir el comando Agregar si no hay una fila seleccionada?

Respuesta

4

Si es necesario hacer algunas acciones de inicialización sólo para el formato Agregar puede utilizar al menos dos enfoques:

  • el uso de defaultValue propiedad como función dentro de editoptions. La función de devolución de llamada defaultValue puede proporcionar el valor para el campo correspondiente del formulario Agregar basado en los datos de la fila seleccionada. Para fines de optimización, puede leer los datos de la fila seleccionada actual una vez en la devolución de llamada 0 evento beforeInitData. Puede leer los datos que necesita o realizar una llamada sincrónica al servidor para obtener la información que necesita. La única desventaja del uso de la propiedad defaultValue es que utiliza el método jQuery.val para establecer el valor predeterminado para todos los campos de Agregar formulario con la excepción 'casilla de verificación' edittype. Para las casillas de verificación jqGrid establecer la propiedad marcada de la casilla de verificación false, 0, no, off o undefined no se encuentran en el valor devuelto por la propiedad defaultValue. Entonces, el enfoque no funcionará para otros tipos de edición. Por ejemplo, puede fallar para el tipo de edición custom.
  • el uso de beforeShowForm o afterShowForm. Dentro de las funciones de devolución de llamada puede establecer cualquier valor del formulario. Puede encontrar el archivo de la columna correspondiente de la cuadrícula por id del campo que es el mismo que el valor de name propiedad de la columna correspondiente.

Como ya se sabe que pueda obtener el id de la fila seleccionada actual con respecto a getGridParam y obtener los datos de la fila seleccionada

var selRowData, rowid = grid.jqGrid('getGridParam', 'selrow'); 
if (rowid !== null) { 
    // a row of grid is selected and we can get the data from the row 
    // which includes the data from all visible and hidden columns 
    selRowData= grid.jqGrid('getGridParam', 'selrow'); 
} 

donde grid es jQuery objeto como $('#list') que selecciona el principal <table> elemento de la cuadrícula.

En the demo puede ver cómo funciona el primer enfoque descrito anteriormente.

+0

Gracias. En algunos casos, es necesario establecer valores predeterminados para los campos de autocompletado de jqueryUI utilizados para la entrada de claves externas desde tablas de búsqueda grandes.autocompletar se implementa como elemento de edición personalizado. Confirme, ¿es la mejor forma de utilizar beforeShowForm en este caso? ¿Deberíamos usar beforeShowForm en otros campos también debido a esto para evitar mezclar dos métodos para establecer el valor predeterminado? ¿Dónde encontrar el código de muestra que establece el valor predeterminado del campo de autocompletar jqueryui en forma de agregar? – Andrus

+0

muestra de código en la muestra de respuesta llama 'grid.jqGrid ('getGridParam', 'selrow');' dos veces – Andrus

+0

@Andrus: No puedo decir qué camino es * el mejor * uno. Puede depender de muchos parámetros. jQuery UI Autocompletar 'fuente' le brinda muchas posibilidades de cómo puede obtener los datos del servidor, por lo que debe elegir cuál es la mejor * para su entorno *. Acabo de describir dos formas en que ambos pueden ser implementados correctamente. – Oleg

Cuestiones relacionadas