Tengo un JQGrid columna con edittype:’Seleccione’ usar dataUrl para devolver una lista de Cuentas con los grupos para los diferentes grupos de Cuentas.

Mi problema: al guardar la fila no se pasa ningún valor a la editurl para mi Seleccione la columna. Si puedo quitar la » s un valor se pasa a editurl para mi Seleccione la columna.

Descripción: Para mi columna de datos que me devuelva el Nombre de la Cuenta, no el valor, así que cuando la rejilla de carga se muestra el nombre.

Cuando una línea está editado (en la edición en línea), el dataUrl se llama y la lista de selección que se muestra y mi Cuenta es seleccionado para las filas de datos.

Yo, a continuación, seleccione una Cuenta nueva desde la lista de selección y pulse enter para guardar. El seleccionado valor de la Cuenta es no pasa a la editurl función de la columna. si puedo quitar el ‘s de la el valor de la Cuenta se pasa a la editurl función.

No estoy seguro de si estoy haciendo algo mal, es decir, no establecer un parámetro de rejilla,

La esperanza de que usted me puede ayudar.

Gracias de antemano,

Chris

Mi código de la Cuadrícula:

$(document).ready(
function () {
    var lastSelection;
    var grid = jQuery("#BankTransactions");
    grid.jqGrid({
        url: '/DropDown/GridData/',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['TransactionLineId', 'TransactionId', 'BankTransactionId', 'Number', 'Amount', 'Category'],
        colModel: [
                    { name: 'transactionLineId', index: 'transactionLineId', editable: true, editrules: { edithidden: true }, hidden: true, width: 40, align: 'left' },
                    { name: 'transactionId', index: 'transactionId', editable: true, editrules: { edithidden: true }, hidden: true, width: 40, align: 'left' },
                    { name: 'bankTransactionId', index: 'bankTransactionId', editable: true, editrules: { edithidden: true }, hidden: true, width: 40, align: 'left' },
                    { name: 'Number', index: 'Number', width: 100, align: 'left', sortable: false },
                    { name: 'Amount', index: 'SubAmount', editable: true, width: 100, align: 'right', sortable: false, cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'class="BankTranEdit"' }, formatter: 'currency', formatoptions: { decimalSeparator: '.', thousandsSeparator: ',', decimalPlaces: 2, defaultValue: ' '} },
                    { name: 'CategoryIdURL', index: 'CategoryIdURL',
                        editable: true,
                        edittype: 'select',
                        //formatter: 'select',
                        editoptions: { dataUrl: "/DropDown/CategorySelectList" },
                        width: 220,
                        align: 'left'
                    },
                  ],
        pager: jQuery('#pager'),
        rowNum: 100,
        rowList: [25, 50, 100],
        editurl: "/Dropdown/GridSave",
        sortname: 'Number',
        sortorder: "desc",
        viewrecords: true,
        width: 1250,
        height: 450,
        onCellSelect: function (rowid, iCol, cellContent, e) {
                        grid.restoreRow(lastSelection);
                        grid.editRow(rowid, true, null, null, null, null, null);
                        lastSelection = rowid;  
                      }

    });
});

Salida de /Desplegables/GridData:

{"total":1,
"page":1,
"records":6,
"rows":[
    {"id":165,"cell":["165","249","125","DM000249","1500.00","Sales"]},
    {"id":145,"cell":["145","229","105","SM000229","100.00","Rent"]},
    {"id":153,"cell":["153","237","113","SM000237","38.07","Bank Fees"]},
    {"id":185,"cell":["185","269","145","SM000269","750.00","Cash Discounts"]},
    {"id":194,"cell":["194","278","154","SM000278","13.29","Rent"]},
    {"id":211,"cell":["211","295","171","SM000295","100.00","Rent"]}]
}   

Salida de /Desplegables/CategorySelectList

<select>
<optgroup label='Expenses'>
<option value='42'>Accounting Fees</option>
<option value='60'>Bank Fees</option>
<option value='23'>Bank Service Charges</option>
<option value='24'>Books and Publications</option>
<option value='25'>Cash Discounts</option>
<option value='43'>Rent</option>
</optgroup>
<optgroup label='Income'>
<option value='19'>Sales</option>
<option value='20'>Services</option>
<option value='21'>Interest Income</option>
<option value='22'>Other Income</option>
</optgroup>
</select>
  • Podrías modificar tu pregunta y añadirlo con la salida de ‘/Desplegables/CategorySelectList’ y de ‘/Desplegables/GridData/’. Después de los datos que uno puede tratar de reproducir el problema.
  • Gracias Oleg, he actualizado a la pregunta con la solicitada de salida. Debería haber hecho la primera vez, mi mal.
InformationsquelleAutor Chris Nieu | 2011-06-27

1 Comentario

  1. 5

    La versión actual de jqGrid no funciona con <optgroup> dentro de <select>.

    JQGrid Edittype: 'seleccione' usar dataurl devuelve <seleccione>, con <optgroup> no guardar seleccione un valor

    Me parece que el uso de <optgroup> podría ser útil en algunos casos. Así que yo depurar el jqGrid código un poco y descubrí que lo que uno necesita para cambiar sólo dos líneas de código de jqGrid (las líneas 143-144 de la grid.inlinedit.js o las líneas 8262-8263 de la jquery.jqGrid.src.js de jqGrid 4.1.1) de

    tmp[nm] = $("select>option:selected",this).val();
    tmp2[nm] = $("select>option:selected", this).text();
    

    a

    tmp[nm] = $("select>option:selected,select>optgroup>option:selected",this).val();
    tmp2[nm] = $("select>option:selected,select>optgroup>option:selected",this).text();
    

    o simplemente para

    tmp[nm] = $("select option:selected",this).val();
    tmp2[nm] = $("select option:selected",this).text();
    

    para solucionar el problema.

    Si uno necesita tener el apoyo de selecciona tener multiple: true atributo:

    JQGrid Edittype: 'seleccione' usar dataurl devuelve <seleccione>, con <optgroup> no guardar seleccione un valor

    uno debe modificar de la misma manera que por encima de una línea más (línea 149) de la grid.inlinedit.js tener la "select>option:selected". Para hacer jqGrid con multiple: true atributo trabajar con dataUrl propiedad uno tiene que fijar una línea más (el la línea 67) de la grid.inlinedit.js. Una necesidad de cambio

    if(cm[i].edittype == "select" && cm[i].editoptions.multiple===true && $.browser.msie){
        $(elc).width($(elc).width());
    }
    

    por ejemplo, la siguiente

    if(cm[i].edittype === "select" && typeof(cm[i].editoptions)!=="undefined" &&
       cm[i].editoptions.multiple===true &&
       typeof(cm[i].editoptions.dataUrl)==="undefined" && $.browser.msie) {
    
        $(elc).width($(elc).width());
    }
    

    Este cambio va a impedir que la configuración de la muy pequeña width de la selección antes de es cargado por el $.ajax solicitud de dataUrl. Probablemente uno debe poner la misma revisión de la width dentro de el éxito controlador de eventos de la correspondiente $.ajax llamada de grid.common.js donde los datos de dataUrl será cargado. He probado mis demos en IE9 y no es necesario hacer la corrección para IE9.

    Usted puede ver las demostraciones con el fijo jqGrid código aquí: el único seleccionar demo, la selección múltiple de demostración. Usted debe tomar en la consideración, de que no hay ningún código para el «/Desplegables/GridSave» en el servidor que se utilizará en el editurl. Sin embargo, usted va a ver en Fiddeler de Firebug que el envío de los datos, que se enviará al servidor, contienen la información acerca del elemento seleccionado. Si desea hacer que la demostración de trabajo local debería modificar la editurl a ‘clientArray’ y probablemente, además loadonce:true.

Dejar respuesta

Please enter your comment!
Please enter your name here