2012-01-15 7 views
6

El siguiente código establece los valores predeterminados para la nueva fila si la fila se agrega mediante el formulario. Si se agrega una fila usando el botón agregar jqGrid en línea de la barra de herramientas, esos métodos no se invocan y los valores predeterminados no se establecen.Cómo establecer valores predeterminados si se agrega una fila usando el botón agregar en línea en jqgrid

Cómo forzar inline add para realizar la misma lógica que el código siguiente?

var lastSelectedRow; 
$grid.navGrid("#grid_toppager", { 
del: true, 
add: true, 
view: true, 
edit: true 
      }, 
      {}, 

     { 
     addedrow: 'beforeSelected', 
     url: '/Grid/Add?_entity=Desktop', 
     beforeInitData: function() { 
     // todo: how to call this method from inline add 
     var rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     if (rowid === null) { 
      alert('Select row before adding'); 
      return false; 
      } 
     }, 

     afterShowForm: function(formID) { 
     // todo: how to set default values as this method sets from inline add 
     var selRowData, 
      rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     $('#' + 'Recordtype' + '.FormElement').val('Veerg'); 
     $('#' + 'Nait2' + '.FormElement')[0].checked = true; 
     selRowData = $grid.jqGrid('getRowData', rowid); 
     $('#' + 'Baas' + '.FormElement').val(selRowData.Baas); 
     $('#' + 'Liigid' + '.FormElement').val(selRowData.Liigid); 
     } 
     ); 


$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      onEdit : onInlineEdit 
     } 
    }, 

    editParams: { 
     editRowParams: { 
      onEdit : onInlineEdit 
      } 
    }, 

    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

function onInlineEdit(rowId) { 
    if (rowId && rowId !== lastSelectedRow) { 
     cancelEditing($grid); 
     lastSelectedRow = rowId; 
    } 
    } 

actualización

me trataron código

$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      extraparam: { _dokdata: FormData }, 
      onSuccess : function (jqXHR) { 
alert('addp oncuss'); 
       jqXHRFromOnSuccess=jqXHR; 
       return true; 
       }, 
      afterSave: function (rowID) { 
alert('afeesave addp '); 
       cancelEditing($grid); 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       jqXHRFromOnSuccess=null; 
       }, 
      onError: errorfunc, 
      afterRestore : setFocusToGrid, 
      oneditfunc : function (rowId) { 
       var selRowData, selRowId ; 
       if (rowId && rowId !== lastSelectedRow) { 
       cancelEditing($grid); 
       selRowId = $grid.jqGrid('getGridParam', 'selrow'); 
       if (selRowId) { 
        selRowData = $grid.jqGrid('getRowData', selRowId); 
        $('#' + rowId + '_Reanr').val(selRowData.Reanr); 
        } 
       lastSelectedRow = rowId; 
       } 
      } 
     } 
    } 
); 

Sólo oneditfunc func se llama. ¿Cómo forzar a los métodos onSuccess, afterSave, onError etc. a llamarse también?

Actualización 2

que añade parche para jqGrid de github recomienda en respuesta y trataron

$.extend(jQuery.jgrid.inlineEdit, { 
    addParams: { 
    position: "beforeSelected", 
    rowID: '<%= EntityBase.NewRowIdPrefix %>', 
    useDefValues: true, 
    addRowParams: { 
     keys: true, 
     extraparam: { _dokdata: FormData }, 
     onSuccess : function (jqXHR) { 
     jqXHRFromOnSuccess=jqXHR; 
     return true; 
     }, 
     afterSave: function (rowID) { 
       cancelEditing($grid); 
       <% if (Model is RowBase) { %> 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } else { %> 
        afterGridSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } %> 
       jqXHRFromOnSuccess=null; 
       }, 
     onError: errorfunc, 
     afterRestore : setFocusToGrid, 
     oneditfunc : function (rowId) { 
     if (rowId && rowId !== lastSelectedRow) { 
      cancelEditing($grid); 
      lastSelectedRow = rowId; 
      } 
     } 
     } 
    } 
}); 

que este caso entran en línea no ponga fin a añadir. Todos los parámetros de este código son ignorados.

Respuesta

5

Debe usar la propiedad defaultValue del editoptions para establecer valores predeterminados para la nueva fila agregada. En la documentación actual, puede encontrar que la opción solo es válida en el módulo Edición de formularios:

La opción puede ser una cadena o una función. Esta opción solo es válida en el módulo de edición de formularios cuando se utiliza con el método editGridRow en el modo de agregar. Si se definió , el elemento de entrada se configura con este valor si solo el elemento está vacío. Si se usa en selects, se debe proporcionar el texto y no la clave. También cuando se usa una función, la función debe devolver el valor.

pero si se examina el código del nuevo método addRow verá que

  1. el valor predeterminado de la opción useDefValues es true
  2. el método no utilizar (ver here) la propiedad defaultValue de el editoptions.

ACTUALIZADO: OK! Ahora veo tu problema. Usó propiedades incorrectas en editRowParams y addRowParams partes de la configuración. Correcta será:

$grid.jqGrid('inlineNav', topPagerSelector, { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      oneditfunc : onInlineEdit 
     } 
    }, 
    editParams: { 
     keys: true, 
     oneditfunc: onInlineEdit 
    }, 
    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

Además se puede utilizar la nueva característica $.jgrid.inlineEdit para establecer keys, oneditfunc u otros parámetros de edición en línea. La implementación de la función no es completa, pero puede examinar la versión actual de github (consulte here) y hacer la misma modificación en su versión de jquery.jqGrid.src.js. De cualquier manera, recomendaría usar la característica $.jgrid.inlineEdit después de publicar la próxima versión de jqGrid.La ventaja es que puede configurar fácilmente las opciones de editRow independientemente de donde se llamará a la función (desde el formateador inlineNav, 'actions' o de cualquier otro modo).

Nueva jqGridInlineEditRow función de eventos (ver here para más información) le permitirá implementar acciones como lo que se hace ahora en el interior de onInlineEdit caso y sin el uso de oneditfunc que se puede establecer una sola vez.

+0

Muchas gracias. El código en cuestión recupera los valores predeterminados de la fila actual y no permite agregar filas si la fila actual no está configurada. ¿Cómo implementar esto usando defaultValue? – Andrus

+0

@Andrus: El ser exactamente el código hace cosas diferentes. Las líneas como '$ ('#' + 'Recordtype' + '.FormElement'). Val ('Veerg');' y '$ ('#' + 'Nait2' + '.FormElement') [0] .checked = verdadero; 'son ajustes puros de valores predeterminados. Debido a otras configuraciones, no entiendo por qué no hace la configuración dentro del controlador 'onEdit' (en la función' onInlineEdit' en su caso)? – Oleg

+0

Necesito obtener valores de la fila actual. No sé cómo obtener los valores de fila actuales en onlineEdit. Probablemente la fila actual ya está agregada, no hay forma de obtener valores de fila previos. también si no hay una fila actual, se debe bloquear agregar en línea. onInlineedit no permite la operación de añadir pads, ya se agregó una nueva fila. – Andrus

Cuestiones relacionadas