2

編集中に行の列にラジオボタンを配置する必要がある jqGrid があります。以下は私のコードです:

function BindPreclosingDocs(response) {
    var previouslyselectedRow;
    var preclosingtable = $('#preclosing');
    preclosingtable.jqGrid({
        datatype: 'jsonstring',
        datastr: JSON.stringify(response.ServiceModel),
        colNames: ['', 'Documents Received', 'Comments', 'SubDocument', 'NA'],
        colModel: [
        { name: 'Documents', index: 'Documents', align: 'left', sortable: false, editable: false, width: 240 },
        { name: 'DocsReceived', index: 'DocsReceived', align: 'center', sortable: false, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" }, formatter: "checkbox", width: 140 },
        { name: 'Comments', index: 'Comments', align: 'center', sortable: false, editable: true, edittype: "textarea", editoptions: { rows: "3", cols: "16" }, width: 180 },
        { name: 'SubDocument', index: 'SubDocument', editable: false, width: 1 },
        { name: 'NA', index: 'NA', editable: true, formatter: 'dynamicText', width: 150, edittype: 'custom', editoptions: { custom_element: radioelem, custom_value: radiovalue} }
        ],
        rowNum: response.ServiceModel.PreClosing.length,
        pager: '#preclosingpagerdiv',
        viewrecords: true,
        sortorder: "asc",
        sortname: 'Documents',
        jsonReader: {
            root: "PreClosing",
            repeatitems: false,
            id: 'ConfigId'
        },
        shrinkToFit: false,
        height: 'auto',
        grouping: true,
        groupingView: {
            groupField: ['SubDocument'],
            groupColumnShow: [false],
            plusicon: 'ui-icon-circle-triangle-s',
            minusicon: 'ui-icon-circle-triangle-n'
        },
        loadComplete: function () {
            HideGroupHeaders(this);                
        },
        onSelectRow: function (id) {
            preclosingtable.jqGrid('saveRow', previouslyselectedRow, false, 'clientArray');
            previouslyselectedRow = SetJQGridRowEdit(id, previouslyselectedRow, preclosingtable);
        }
    });
    preclosingtable.setGridWidth('710');
};


//RowSelect 
function SetJQGridRowEdit(id, previousid, grid) {
    if (id && id !== previousid) {
        grid.jqGrid('restoreRow', previousid);
        grid.jqGrid('editRow', id, true);
        previousid = id;
        return previousid;
    }
};

//Build radio button
function radioelem(value, options) {
    var receivedradio = '<input type="radio" name="receivednaradio" value="R"';
    var breakline = '/>Received<br>';
    var naradio = '<input type="radio" name="receivednaradio" value="N"';
    var endnaradio = '/>NA<br>';
    if (value == 'Received') {
        var radiohtml = receivedradio + ' checked="checked"' + breakline + naradio + endnaradio;
        return radiohtml;
    }
    else if (value == 'NA') {
        var radiohtml = receivedradio + breakline + naradio + ' checked="checked"' + endnaradio;
        return radiohtml;
    }
    else {
        return receivedradio + breakline + naradio + endnaradio;
    }
};

function radiovalue(elem, operation, value) {
    if (operation === 'get') {
        return $(elem).val();
    } else if (operation === 'set') {
        if ($(elem).is(':checked') === false) {
            $(elem).filter('[value=' + value + ']').attr('checked', true);
        }
    }
};

私のフォーマッタとアンフォーマッタのコードは次のとおりです

dynamicText: function (cellvalue, options, rowObject) {
        if (cellvalue == 'R') {
            return 'Received';
        }
        else if (cellvalue == 'N') {
            return 'NA';
        }
        else {
            return '';
        }
    }

$.extend($.fn.fmatter.dynamicText, {
    unformat: function (cellValue, options, elem) {
        debugger;
        var text = $(elem).text();
        return text === '&nbsp;' ? '' : text;
    }
});

私が抱えている問題は、行を選択して編集ボタンをチェックすると、ラジオバリュー関数に設定されていないことです。行が選択されたときにラジオボタンを作成しているときに、get in radiovalue 関数を起動します。ラジオボタンに値を設定できるように助けてください!

ありがとう

4

1 に答える 1

3

私はあなたが正しいと思います。custom_value異なる編集モードでは、コールバックの使用方法に違いがあります。

フォーム編集が使用されていて、編集可能な列にedittype: 'custom'最初のcustom_element関数 (あなたの場合はradioelem関数) が含まれている場合、 内で呼び出され$.jgrid.createElます。次に、 (フォームの追加ではなく)のcustom_value場合に追加で呼び出されます。rowid !== "_empty"詳細については、コード行を参照してください。

問題は、パラメータcustom_elementがあることです。valueそのため、カスタム コントロールで値を設定して呼び出すことができ、 withcustom_elementの追加の呼び出しは実際には必要ありません。custom_value"set"

別の編集モード (インライン編集とセル編集) は、カスタム コントロールを作成するだけです。コールバックがパラメータcustom_valueで呼び出されることはありません。"set"

カスタム コントロールに関するドキュメントが短すぎることを確認しました。radiovaluepart のコードの一部を削除するだけでよいと思います'set'。次のコードもうまくいくと思います(フォーム編集の場合でも):

function radiovalue(elem, operation, value) {
    if (operation === 'get') {
        return $(elem).val();
    }
}

1 つの注意点: カスタム コントロールを使用する場合は、 recreateForm: trueオプションを使用することを忘れないでください。インライン編集、フォーム編集、検索でのカスタム コントロールの使用例として、こちらを参照してください。answerにあるデモへの参照。

于 2013-03-29T00:29:08.717 に答える