0

jqGrid があり、新しい行を追加するときに 1 つの列にデフォルト値が必要です。ドキュメントに従いましたが、値が表示されません。

これは、colModel の列です。

{name: 'Lt', index: 'Lt', width: 25, editable: true, editoptions: {defaultValue: 'N'}}

これが addRowData を呼び出す方法です。

$("#grid").addRowData(-1,
    { Datum: $.datepicker.formatDate("yy-mm-dd", new Date()) }, "first", true)

私が見る限り、私は本でやっています!

完全なグリッド定義:

    $("#dagbok_grid").jqGrid({
        datatype: 'json',
        mtype: 'GET',
        colNames: [
            'a',
            'b',
            'c',
            'd',
            'e',
            'f',
            'g',
            'h',
            'i',
            'j',
            'k',
            'l',
            'm',
            'n',
            'o',
            'p',
            'q',
            'r',
            's'],
        colModel: [
          { name: 'a', index: 'a', width: 30, formatter: 'checkbox', edittype: 'checkbox', editable: true },
          { name: 'b', index: 'b', width: 30, formatter: 'checkbox', edittype: 'checkbox', editable: true },
          { name: 'c', index: 'c', width: 70, formatter: 'date', editable: true, editrules: { required: true }, editoptions: { dataInit: function (elem) { $(elem).datepicker(); } } },
          { name: 'd', index: 'd', width: 65, editable: true, formatter: 'date', formatoptions: { srcformat: 'H:i:s', newformat: 'ShortTime' }, editrules: { time: true} },
          { name: 'e', index: 'e', width: 80, edittype: 'select', editable: true, formatter: 'select' },
          { name: 'f', index: 'f', width: 100, editable: true, edittype: 'textarea', editoptions: {rows: '7'} },
          { name: 'g', index: 'g', width: 80, editable: true, edittype: 'textarea', editoptions: { rows: '7'} },
          { name: 'h', index: 'h', width: 80, editable: true, editrules: { maxValue: 50} },
          { name: 'i', index: 'i', width: 120, edittype: 'select', editable: true, formatter: 'select' },
          { name: 'j', index: 'j', width: 200, edittype: 'select', editable: true, formatter: 'select' },
          { name: 'k', index: 'k', width: 70, edittype: 'select', editable: true, formatter: 'select' },
          { name: 'l', index: 'l', width: 70, editable: true, editrules: { maxValue: 10} },
          { name: 'm', index: 'm', width: 25, editable: true, editoptions: { defaultValue: 'N'} },
          { name: 'n', index: 'n', width: 70, editable: true, editrules: { integer: true, maxValue: 999999 }, formatter: formatPosition, unformat: unformatPosition },
          { name: 'o', index: 'o', width: 25, editable: true, editrules: { custom: true, custom_func: chkLongitudTecken} },
          { name: 'p', index: 'p', width: 80, editable: true, editrules: { integer: true, maxValue: 999999 }, formatter: formatPosition, unformat: unformatPosition },
          { name: 'q', index: 'q', width: 80, edittype: 'select', editable: true, formatter: 'select' },
          { name: 'r', index: 'r', width: 100, editable: true, editrules: { maxValue: 50} },
          { name: 's', index: 's', width: 65, edittype: 'select', editable: true, formatter: 'select' },
        ],
        sortname: 'c',
        sortorder: 'desc',
        shrinkToFit: false,
        viewrecords: true,
        gridview: true,
        onSelectRow: function (id) {
            if (id && id !== lastsel) {
                jQuery('#dagbok_grid').saveRow(lastsel);
                lastsel = id;
            }
            jQuery('#dagbok_grid').editRow(id, true);
        },
        height: 400,
        editurl: '@Url.Action("SaveGridRow")',
        caption: 'my grid'
    });

また、後でいくつかの列に選択値を追加します。

    $.ajax({
        type: 'GET',
        url: '@Url.Action("GetGridComboValues")',
        async: false,
        success: function (data) {
            var grid = $("#dagbok_grid");
            grid.setColProp("e", { editoptions: { value: data.kallor} });
            grid.setColProp("i", { editoptions: { value: data.rubriker} });
            grid.setColProp("j", { editoptions: { value: data.verksamheter} });
            grid.setColProp("k", { editoptions: { value: data.opPadrag, dataEvents: [{ type: 'change', fn: function (e) {
                $.ajax({
                    type: "GET",
                    url: '@Url.Action("GetVerksamhetskod")',
                    data: { "opPadragId": e.currentTarget.value },
                    dataType: 'json',
                    success: function (data) {
                        var selr = jQuery('#dagbok_grid').jqGrid('getGridParam', 'selrow');
                        jQuery("#dagbok_grid").jqGrid('setCell', selr, "l", data);
                    }
                });
            }
            }]
            }
            });
            grid.setColProp("q", { editoptions: { value: data.medier} });
            grid.setColProp("s", { editoptions: { value: data.regioner} });
        }
    });

コードの追加と削除

    $("#toolbarAddButton")
        .button()
        .click(function () {
            $("#dagbok_grid").addRowData(-1, { Datum: $.datepicker.formatDate("yy-mm-dd", new Date()) }, "first", true)
        });

    $("#toolbarDeleteButton").click(function () {
        var radid = $("#dagbok_grid").jqGrid("getGridParam", "selrow");
        if (radid != null) {
            var su = $("#dagbok_grid").jqGrid("delRowData", radid);
            $("#dagbok_grid").jqGrid("delGridRow", radid, { url: '@Url.Action("DeleteGridRow")', reloadaftersubmit: false });

        }
    })

編集モードでユーザーが Enter キーを押すと、保存が実行されます。

4

1 に答える 1

2

まず、 を定義しeditoptions: { defaultValue: 'N'}ました。editoptionsのドキュメントで読むことができます

オプションは文字列または関数です。このオプションは、メソッドを追加モードで使用する場合、フォーム編集モジュールでのみ有効です。editGridRow定義されている場合、要素のみが空の場合、入力要素はこの値で設定されます。選択で使用する場合は、キーではなくテキストを提供する必要があります。また、関数が使用される場合、関数は値を返す必要があります。

必要なのは、編集中ではなく、グリッド本体の塗りつぶし中にデフォルト値が設定されることです。目的のためにdefaulValueフォーマッタ オプションが存在しますが、一部の事前定義されたフォーマッタにのみ使用されます (ドキュメントを参照してください)。

カスタムフォーマッタaddRowDataを使用するか、メソッドを直接使用する場合は、列の値を明示的に追加することで問題を解決できLtます。

addRowData遅く、ほとんどの場合間違った方法で使用される低レベルの方法を使用することはお勧めしません。たとえば-1、ROWIDとして使用しました。同じステートメントを複数回実行すると、エラーである ID の重複が発生し、非常に奇妙な結果が生じる可能性があります。jqGrid で一意の ID 自体を生成する場合はundefined、rowid パラメータとして使用する必要があります。

于 2012-04-17T07:24:58.250 に答える