2

現在、入力された最後の行から多くのデータを繰り返す必要があるシステムで要件があります。実際、これは私のグリッドです:

$('#list').jqGrid({
        colNames: ['VendedorId', 'Vendedor', 'Especie', 'Cabezas', 'Kilos', 'Precio', 'Guías Venta', 'Vencimiento'],
        colModel: [
            { hidden: true, name: 'VendedorId' },
            { editable: true, width: 160, edittype: 'select', editoptions: { dataUrl: '/Clientes/CmbClientes' }, editrules: { required: true }, name: 'Vendedor' },
            { editable: true, width: 70, edittype: 'select', editoptions: { dataUrl: '/Especies/CmbEspecie' }, editrules: { required: true }, name: 'Especie' },
            { align: 'right', width: 50, editable: true, editoptions: { size: 3, maxlength: 3 }, editrules: { number: true }, formatter: 'number', formatoptions: { decimalPlaces: 0 }, name: 'Cabezas' },
            { align: 'right', width: 50, editable: true, editrules: { number: true }, formatter: 'number', formatoptions: { decimalPlaces: 0 }, name: 'Kilos' },
            { align: 'right', width: 50, editable: true, editrules: { number: true, required: true }, formatter: 'currency', formatoptions: { prefix: '$',decimalPlaces: 2  }, name: 'Precio' },
            { editable: true, width: 50, editoptions: { maxlength: 20 }, name: 'GuiasVenta' },
            { align: 'right', width: 70, editable: true, editoptions: { size: 3, maxlength: 3 }, editrules: { number: true, required: true }, formatter: 'number', formatoptions: { decimalPlaces: 0 }, name: 'Vencimiento' }
        ],
        url: '@Url.Action("ListVendedores")',
        datatype: 'json',
        editurl: '@Url.Action("SaveVendedor")',
        mtype: 'POST',
        pager: '#vendedoresPager',
        prmNames: { id: 'RemateId' },
        rowList: [5, 10, 15, 20],
        sortname: 'FeriaId',
        viewrecords: true,
        width: 850
    }).jqGrid('navGrid', '#vendedoresPager', { add: false, edit: false, del:true ), search: false },{},{},{ url: '/Remates/BorrarVendedor' }).
        jqGrid('inlineNav', '#vendedoresPager',
            {
                add : true,
                edit : true,
                save : true,
                addParams: {
                    addRowParams: {
                        position: "afterSelected",
                        keys: true,
                        extraparam: {
                            ...
                        }
                    }
                },
                editParams: {
                    keys: true,
                    extraparam: {
                        ...
                    }
                }
            });

最初の行を追加するとき、デフォルトのデータはありませんが、Vendor、Especie、Guías Venta、および Vencimiento の各フィールドは、最後に入力されたものを繰り返す必要があります。

このシナリオでは、2 つの解決策が考えられます。1 つはイベント jqGridInlineEditRow を使用する方法で、もう 1 つはオートコンプリートを使用する方法です。qGridInlineEditRow に関するこの質問を読んでください。ただし、この場合、グリッドの最後の行からデータを取得し、データを新しい行にロードする方法を説明します。そして、オートコンプリートに関するこの質問を読んでください。

解決策のより良い近似を得るために読み取ることができる他の解決策があるかもしれません。

誰でも助けることができますか?

2013 年 4 月 15 日更新

カスタム ボタンの [追加] ボタンを置き換えます。これはコードです。

    $("#Agregar").click(function () {
    var parameters =
        {
            initdata: {},
            position: "first",
            useDefValues: true,
            useFormatter: false,
            addRowParams: {
                keys: true,
                extraparam: {
                    ...
                },
                aftersavefunc: function (rowid) {
                    var grid = jQuery('#vendedores');
                    lastSavedAddData = grid.jqGrid("getRowData", rowid);
                },
                oneditfunc: function (rowid) {
                    var name;
                    var grid = jQuery('#vendedores');
                    for (name in lastSavedAddData) {
                        if (lastSavedAddData.hasOwnProperty(name)) {
                            $('#' + rowid +"_"+  name).val(lastSavedAddData[name]);
                        }
                    }
                }
            }
        };
    jQuery("#vendedores").jqGrid('addRow', parameters);
});

ただし、これはテキストボックスでのみ機能し、コンボでは機能しません

4

1 に答える 1

2

あなたの質問を正しく理解していれば、jQuery UI Autocomplete の使用は、次のような追加を開始する際に最後に追加された行の入力フィールドの最初の入力とは無関係です。

aftersavefuncで定義されたコールバック内の最後に追加された行に保存されたデータを保存できるようですaddRowParams(またはjqGridInlineAfterSaveRow代わりにイベントを使用します)。oneditfunc最後に入力した値を new like に設定するために使用できます。たとえば、使用できます

addRowParams: {
    position: "afterSelected",
    keys: true,
    extraparam: {
        ...
    },
    aftersavefunc: function (rowid) {
        lastSavedAddData = $(this).jqGrid("getRowData", rowid);
    },
    oneditfunc: function (rowid) {
        var name;
        for (name in lastSavedAddData) {
            if (lastSavedAddData.hasOwnProperty(name)) {
                $("#" + $.jgrid.jqID(rowid + "_" + name)).val(lastSavedAddData[name]);
            }
        }
    }
}

どこlastSavedAddDataかの外側のスコープで定義する必要があります。テスト済みのコードではありません。主なアイデアを示したかっただけです。のコードを拡張して、oneditfunc行の編集で使用するさまざまなコントロールをサポートできます。

于 2013-04-13T13:42:24.023 に答える