jqgrid还原行不工作

jqgrid还原行不工作,jqgrid,restore,Jqgrid,Restore,我正在调试一些旧代码(joy),问题是restoreRow根本不工作,因此当用户单击行时(进入编辑模式),但用户没有更改任何内容,然后移动到下一行,上一行仍处于编辑状态,而不是还原状态。我不知道为什么会发生这种情况,所以任何见解都是受欢迎的 //at the beginning of the file var currentRowIdSelected; var prevRowIdSelected; var prevRowModified = false; $(gri

我正在调试一些旧代码(joy),问题是restoreRow根本不工作,因此当用户单击行时(进入编辑模式),但用户没有更改任何内容,然后移动到下一行,上一行仍处于编辑状态,而不是还原状态。我不知道为什么会发生这种情况,所以任何见解都是受欢迎的

//at the beginning of the file
    var currentRowIdSelected;
    var prevRowIdSelected;
    var prevRowModified = false;


 $(grid).jqGrid({
            url: als.common.getServerPath() + 'SamplesDefinitionAjax/SamplesDefinition',
            editurl: als.common.getServerPath() + 'SamplesDefinitionAjax/UpdateSample',
            datatype: 'local',
            mtype: 'POST',
            height: 516,
            width: 1000,
            caption: 'Samples',
            hidegrid: false,
            loadonce: true,
            loadtext: 'Please wait,</br>loading samples...',
            colModel: [
                { name: 'ClientBarcode', label: 'Client Barcode', sortable: false, width: 46 },
                {
                    name: 'OrderNumber',
                    index: 'OrderNumber',
                    label: 'Seq #',
                    sortable: true, sorttype: 'integer',
                    width: 28
                },
                {
                    name: 'Description',
                    label: 'Description',
                    sortable: false,
                    editable: true,
                    editrules: { custom: true, custom_func: validateDescription }
                },
                {
                    name: 'Type',
                    index: 'Type',
                    label: 'Type',
                    sortable: true,
                    editable: true,
                    edittype: 'select',
                    width: 40,
                    align: 'center',
                    editoptions: {
                        dataUrl: als.common.getServerPath() + 'SamplesDefinitionAjax/GetTypes',
                        buildSelect: function (data) {
                            var response = jQuery.parseJSON(data);
                            var s = '<select id="samplestypefororder">';
                            if (response && response.length) {
                                s += '<option value="" disabled="disabled" ></option>';
                                $.each(response, function (index, elem) {
                                    if ((elem.Tier === "1") || (elem.Tier === "N")) {
                                        s += '<option data-tier="' + elem.Tier + '" value="' + elem.Type + '">' + elem.Type + '</option>';
                                    }
                                });
                                s += '<optgroup label="Not Counted"><options>';
                                $.each(response, function (index, elem) {
                                    if (elem.Tier === "Z") {
                                        s += '<option data-tier="' + elem.Tier + '" data-parentTier="' + elem.parentTier + '" data-parentType="' + elem.parentType + '">' + elem.Type + '</option>';
                                    }
                                });
                                s += '</options></optgroup><optgroup label="Other">';
                                $.each(response, function (index, elem) {
                                    if ((elem.Tier === "2") || (elem.Tier === "B") || (elem.Tier === "S") || (elem.Tier === "D")) {
                                        s += '<option data-tier="' + elem.Tier + '" data-parentTier="' + elem.parentTier + '" data-parentType="' + elem.parentType + '">' + elem.Type + '</option>';
                                    }
                                });
                                s += '</optgroup>';
                                s += "</select>";
                                sampleTypesExcludedFromDup.length = 0;
                                $.each(response, function (index, elem) {
                                    if (elem.Tier === "N") {
                                        sampleTypesExcludedFromDup.push(elem.type);
                                    }
                                });
                            }

                            return s + "</select>";
                        },
                        dataEvents: [
                            { type: 'change', data: { test: 12 }, fn: sampletypechanged }
                        ]
                    }
                },
                { name: 'SampType', label: 'SampType', sortable: false, editable: false, hidden: true, width: 50 },
                {
                    name: 'ReceivedWeight',
                    index: 'ReceivedWeight',
                    label: 'Received Weight',
                    sortable: true, sorttype: 'number',
                    editable: false, width: 32, align: 'right'
                },
                { name: 'ReceivedDate', label: 'Received Date', sortable: false, editable: false, width: 40, align: 'center' },
                { name: 'SecurityTag', label: 'Security Tag', sortable: false, editable: true, width: 30 },
                { name: 'OriginalWorkorder', label: 'Original Workorder', sortable: false, editable: false, width: 60, hidden: true },
                { name: 'ClientStdName', label: 'Standard Name', sortable: false, editable: false, width: 40, hidden: false },
                { name: 'ClientStdType', label: 'Standard Type', sortable: false, editable: false, width: 30, hidden: true },
                { name: 'ParentOrderNumber', label: 'Duplicate #', sortable: false, editable: false, width: 50, hidden: false },
                { name: 'ParentSampDesc', label: 'Duplicate', sortable: false, editable: false, width: 30, hidden: true },
                { name: 'HasChildRef', label: 'HasChildRef', sortable: false, editable: false, width: 30, hidden: true },
                { name: 'Status', label: 'Status', sortable: false, editable: false, width: 30, hidden: true }
            ],
            multiselect: true,
            multiboxonly: true,
            pager: pager,
            pgbuttons: false,
            pginput: false,
            rowNum: -1,
            rowattr: function (data) {
                if (data.Status === 'Cancel') {
                    return { "class": "sampleCancelRow" };
                } else return {};
            },
            loadComplete: function () {
                var samples = $(grid).jqGrid('getRowData');
                checkBarCodeMismatch(samples);

                currentRowIdSelected = undefined;
                prevRowIdSelected = undefined;
                prevRowModified = false;

                $('input#total_number_of_samples').trigger('notify.updateWoSampleCount');

                // update the col number when click on a edit box. 
                $(grid).off('click', 'input[name="Description"]');
                $(grid).off('click', 'input[name="SecurityTag"]');
                $(grid).off('click', 'select[name="Type"]');
                $(grid).on('click', 'input[name="Description"]', function () {
                    curCol = colnumSampdesc;
                });
                $(grid).on('click', 'input[name="SecurityTag"]', function () {
                    curCol = colnumSecuritytag;
                });
                $(grid).on('click', 'select[name="Type"]', function () {
                    curCol = colnumSampletype;
                });


            },
            onCellSelect: function (row, col) {
                curCol = col;
            },
            beforeSelectRow: function (rowid, e) {
                // this is common to multiple grids and could go in a grid library
                if (!e.ctrlKey && !e.shiftKey) {
                    $(this).jqGrid('resetSelection');
                }
                else if (e.shiftKey) {
                    var initialRowSelect = $(this).jqGrid('getGridParam', 'selrow');
                    $(this).jqGrid('resetSelection');

                    var currentSelectIndex = $(this).jqGrid('getInd', rowid);
                    var initialSelectIndex = $(this).jqGrid('getInd', initialRowSelect);
                    var startId;
                    var endId;
                    if (currentSelectIndex > initialSelectIndex) {
                        startId = initialRowSelect;
                        endId = rowid;
                    }
                    else {
                        startId = rowid;
                        endId = initialRowSelect;
                    }

                    var shouldSelectRow = false;
                    $.each($(this).getDataIDs(), function (_, id) {
                        if ((shouldSelectRow = id === startId || shouldSelectRow) && (id !== rowid)) {
                            $('#flagGrid').jqGrid('setSelection', id, false);
                        }
                        return id !== endId;
                    });
                }
                return true;
            },
            onSelectRow: function (id) {
                currentRowIdSelected = id;

                woOrdno = $(grid).jqGrid('getGridParam', 'selrow');
                compPrevSampType = $(grid).find(' tr[id="' + currentRowIdSelected + '"]').find("td").eq(colnumSampletype).text();

                if (prevRowIdSelected !== undefined) {

                    //$(grid).jqGrid('restoreRow', prevRowIdSelected);
                    //$(grid).restoreRow(prevRowIdSelected);

                   if (prevRowModified) {
                        //validate description
                        var descCellText = $("#" + prevRowIdSelected + "_Description", grid).val();
                        var test = [];
                        if (descCellText !== undefined) {
                            test = validateDescription(descCellText, 'Description');
                        } else { // the row was not in edit mode (user pressed entered before selecting new row)
                            descCellText = $(grid).find(' tr[id="' + prevRowIdSelected + '"]').find("td").eq(colnumSampdesc).text();
                            test = validateDescription(descCellText, 'Description', 1);
                        }

                        if (!test[0]) {
                            showErrorDialog(descCellText + ' ' + test[1]);
                            $(grid).resetSelection();
                            $(grid).setSelection(prevRowIdSelected, false);
                            return true;
                        }

                        //client barcode
                        var clientBarcodeCellText = $("#" + prevRowIdSelected + "_ClientBarcode", grid).val();

                        if (clientBarcodeCellText === undefined) {
                            clientBarcodeCellText = $(grid).find(' tr[id="' + prevRowIdSelected + '"]').find("td").eq(colnumClientBarcode).text();
                        }

                        $(grid).saveRow(prevRowIdSelected, {
                            url: als.common.getServerPath() + 'SamplesDefinitionAjax/UpdateSample',
                            extraparam: {
                                folderno: webview.workorder.woheader.model.woheader_folderno,
                                rowid: prevRowIdSelected,
                                ClientStdName: $(grid).find(' tr[id="' + prevRowIdSelected + '"]').find("td").eq(colnumClientstdname).text(),
                                ClientStdType: $(grid).find(' tr[id="' + prevRowIdSelected + '"]').find("td").eq(colnumClientStdType).text(),
                                ParentOrderNumber: $(grid).find(' tr[id="' + prevRowIdSelected + '"]').find("td").eq(colnumParentordernumber).text()
                            },
                            aftersavefunc: function () {
                                if (!reloadAfterSave(prevRowIdSelected)) {
                                    var samples = $(grid).jqGrid('getRowData');
                                    checkBarCodeMismatch(samples);
                                }
                            },
                            successfunc: function () {
                                if (reloadAfterSave(prevRowIdSelected)) {
                                    reloadSampleDefinitions(webview.workorder.woheader.model.woheader_folderno);
                                }
                                else
                                prevRowModified = false;
                                return true;
                            },
                            errorfunc: function (rowid, response) {
                                $('<div>').html(response.responseText.split('\"')[3].split('\\')[0].substr(11))
                                .dialog({
                                    modal: true, title: 'Server error',
                                    buttons: { Close: function () { $(this).dialog('close'); } }
                                });
                            }
                        });
                        //TODO: revisit this
                        //  $(grid).restoreRow(prevRowIdSelected);
                    } else {
                        $(grid).restoreRow(prevRowIdSelected);
                    }
                }

                var samplestatus = $(grid).getCell(currentRowIdSelected, 'Status');
                if (samplestatus === 'Cancel') {
                    prevRowIdSelected = undefined;
                    return false;
                }

                $(grid).setColProp('Type', { editable: true });
                $(grid).setColProp('SecurityTag', { editable: true });

                var currentSampType = $(grid).getCell(currentRowIdSelected, 'SampType');
                var currentType = $(grid).getCell(currentRowIdSelected, 'Type');
                var currentOriginalWorkorder = $(grid).getCell(currentRowIdSelected, 'OriginalWorkorder');

                if (currentSampType === 'PDU') {
                    $('#woEditSamplesErrormsg').text('You can not modify the PDU samples directly but you can delete them.');
                    $(editsampleserrordlg).dialog('open');
                    return true;
                //} //else if (currentOriginalWorkorder !== '' && currentType && currentType.substring(0, 4).toUpperCase() !== 'PULP') {
                  //  $('#woEditSamplesErrormsg').text('You can not modify these samples as this is a child workorder but you can delete them.');
                  //  $(editsampleserrordlg).dialog('open');
                  //  return true;
                } else if (currentOriginalWorkorder !== '') {
                    $(grid).setColProp('Type', { editable: false });
                    $(grid).setColProp('SecurityTag', { editable: false });
                }

                if (compPrevSampType === 'Composite') {
                    $(grid).setColProp('ClientBarcode', { editable: true/*, editrules: { custom: true, custom_func: validateClientBarcode }*/ });
                }
                else {
                    $(grid).setColProp('ClientBarcode', { editable: false });
                }

                $(grid).editRow(currentRowIdSelected, {
                    keys: true,
                    successfunc: function () {
                        if (reloadAfterSave(currentRowIdSelected))
                            reloadSampleDefinitions(webview.workorder.woheader.model.woheader_folderno);
                        return true;
                    },
                    aftersavefunc: function () {
                        if (!reloadAfterSave(prevRowIdSelected)) {
                            var samples = $(grid).jqGrid('getRowData');
                            checkBarCodeMismatch(samples);
                        }
                    },
                    url: als.common.getServerPath() + 'SamplesDefinitionAjax/UpdateSample',
                    extraparam: {
                        folderno: webview.workorder.woheader.model.woheader_folderno,
                        rowid: currentRowIdSelected,
                        ClientStdName: $(grid).find(' tr[id="' + currentRowIdSelected + '"]').find("td").eq(colnumClientstdname).text(),
                        ClientStdType: $(grid).find(' tr[id="' + prevRowIdSelected + '"]').find("td").eq(colnumClientStdType).text(),
                        ParentOrderNumber: $(grid).find(' tr[id="' + currentRowIdSelected + '"]').find("td").eq(colnumParentordernumber).text()
                    },
                    restoreAfterError: false,
                    mtype: "POST",
                    errorfunc: function (rowid, response) {
                        $('<div>').html(response.responseText.split('\"')[3].split('\\')[0].substr(11))
                        .dialog({
                            modal: true, title: 'Server error',
                            buttons: { Close: function () { $(this).dialog('close'); } }
                        });
                    }
                });

                prevRowIdSelected = currentRowIdSelected;

                if (id === '000') {
                    $("#" + id + "_Description", grid).attr('disabled', 'disabled');
                    $("#" + id + "_SecurityTag", grid).attr('disabled', 'disabled');
                }
                return id;
            }
        })
            .navGrid(pager,
                {
                    addtitle: 'Add sample',
                    addfunc: function () { addSample(); },
                    edit: false,
                    deltitle: 'Delete samples',
                    delfunc: function () { delSamples(); },
                    search: false,
                    refresh: false
                },
                //edit
                {},
                //add
                {},
                //delete
                {},
                //search
                {},
                //view
                 {})
            .closest('div.ui-jqgrid-view').children('div.ui-jqgrid-titlebar').css('text-align', 'center').
                children('span.ui-jqgrid-title').css('float', 'none');

        $(grid).jqGrid('navButtonAdd', pager, {
            buttonicon: 'ui-icon-copy-code',
            caption: '',
            title: 'Copy sample description from client barcode',
            id: 'btnCopyCode',
            onClickButton: copySampleDescToBarcode
        });

        $(grid).jqGrid('navButtonAdd', pager, {
            buttonicon: 'ui-icon-copy-desc',
            caption: '',
            title: 'Copy sample description from other workorder',
            id: 'btnCopyDesc',
            onClickButton: openWorkordersDialogBox
        });     

        $(grid).jqGrid('navButtonAdd', pager, {
            buttonicon: 'ui-icon-clipboard',
            caption: '',
            title: 'Paste column from clipboard',
            id: 'btnPaste',
            onClickButton: pasteClipboard
        })
            .navSeparatorAdd(pager, { sepclass: 'ui-separator', sepcontent: '' });
        $(grid).jqGrid('navButtonAdd', pager, {
            buttonicon: 'none',
            caption: btnBarcodeMisMatchCaptionFilter,
            id: 'btnMismatches',
            onClickButton: filterMismatches
        })
            .navSeparatorAdd(pager, { sepclass: 'ui-separator', sepcontent: '' });


        $(grid).jqGrid('navButtonAdd', pager, {
            buttonicon: "ui-icon-gedit-sample-type",
            caption: "",
            title: "Group edit sample type",
            id: "btnGroupEditSampleType",
            onClickButton: groupEditSampleType
        });

    };
//在文件的开头
var currentRowIdSelected;
var prevRowIdSelected;
var prevRowModified=false;
$(网格).jqGrid({
url:als.common.getServerPath()+'SampleDefinitionAjax/SampleDefinition',
editurl:als.common.getServerPath()+'SamplesDefinitionAjax/UpdateSample',
数据类型:“本地”,
mtype:“POST”,
身高:516,
宽度:1000,
标题:"样本",,
希德格里德:错,
有一次:是的,
loadtext:'请稍候,
正在加载样本…', colModel:[ {name:'ClientBarcode',label:'Client Barcode',sortable:false,width:46}, { 名称:“订单号”, 索引:“订单号”, 标签:“Seq#”, sortable:true,sorttype:'integer', 宽度:28 }, { 名称:'说明', 标签:“说明”, 可排序:false, 是的, editrules:{custom:true,custom_func:validateDescription} }, { 名称:'类型', 索引:“类型”, 标签:“类型”, 可排序:是的, 是的, edittype:'选择', 宽度:40, 对齐:'居中', 编辑选项:{ dataUrl:als.common.getServerPath()+“SampleDefinitionAjax/GetTypes”, buildSelect:函数(数据){ var response=jQuery.parseJSON(数据); var s=''; if(响应和响应长度){ s+=''; $。每个(响应、功能(索引、元素){ if((elem.Tier==“1”)| |(elem.Tier==“N”)){ s+=''+元素类型+''; } }); s+=''; $。每个(响应、功能(索引、元素){ 如果(元素层==“Z”){ s+=''+元素类型+''; } }); s+=''; $。每个(响应、功能(索引、元素){ 如果((elem.Tier==“2”)| |(elem.Tier==“B”)| |(elem.Tier==“S”)| |(elem.Tier==“D”)){ s+=''+元素类型+''; } }); s+=''; s+=”; sampleTypesExcludedFromDup.length=0; $。每个(响应、功能(索引、元素){ 如果(元素层==“N”){ 样本类型包括重复推送(元素类型); } }); } 返回s+“”; }, 数据事件:[ {type:'change',数据:{test:12},fn:sampletypechanged} ] } }, {name:'SampType',label:'SampType',sortable:false,editable:false,hidden:true,width:50}, { 名称:'ReceivedWeight', 索引:“接收重量”, 标签:“收到重量”, sortable:true,sorttype:'number', 可编辑:false,宽度:32,对齐:“右” }, {name:'ReceivedDate',label:'receivedate',sortable:false,editable:false,width:40,align:'center'}, {name:'SecurityTag',label:'Security Tag',sortable:false,editable:true,width:30}, {name:'OriginalWorkorder',label:'OriginalWorkorder',sortable:false,editable:false,width:60,hidden:true}, {name:'ClientStdName',label:'Standard name',sortable:false,editable:false,width:40,hidden:false}, {name:'ClientStdType',label:'Standard Type',sortable:false,editable:false,width:30,hidden:true}, {name:'ParentOrderNumber',label:'Duplicate#',sortable:false,editable:false,width:50,hidden:false}, {name:'ParentSampDesc',label:'Duplicate',sortable:false,editable:false,width:30,hidden:true}, {name:'HasChildRef',label:'HasChildRef',sortable:false,editable:false,width:30,hidden:true}, {name:'Status',label:'Status',sortable:false,editable:false,width:30,hidden:true} ], 多选:对, multiboxonly:正确, 寻呼机:寻呼机, PG按钮:错误, pginput:false, rowNum:-1, rowattr:函数(数据){ 如果(data.Status==“取消”){ 返回{“类”:“sampleCancelRow”}; }else返回{}; }, loadComplete:函数(){