2012-11-07 114 views
1

我有多選擇內聯可編輯jqGrid與inlineNav。下面的步驟是創建問題:inlineNav編輯按鈕不與多選jqGrid

  1. 點擊添加按鈕,空記錄獲取顯示在grid.add數據並保存它。
  2. 使用複選框選擇該記錄。
  3. 按照1步在網格中再添加一條記錄,但點擊取消按鈕保存它。
  4. 最近的記錄得到消失,點擊編輯按鈕,因爲我已經選擇了一條記錄。
  5. 所選記錄未進入編輯模式,它發出警告信息「選擇行」。
  6. 如果我取消選擇並再次選擇並單擊編輯按鈕,它將出現在編輯模式下。

你能告訴我任何解決方案嗎?

var i = 1; 
var lastSelection = 0; 
$(function() { 
    $("#curruntppeGridgrid").jqGrid({ 
     url: 'getcostperformancecurreuntPPE', 
     datatype: "json", 
     jsonReader: { "repeatitems": false, unformat: Unformat_Select }, 
     colNames: ['Category', 'Manufacturer', 'Style', 'UOM', 'Count', 'Unit', 'Qty', 'Cost', 'Sizes', 'Annual Cost', 'VP2'], 
     colModel: [ 
      { 
       name: 'category', index: 'category', align: 'center', editable: true, hidden: false, edittype: 'select', 
       editoptions: { 
        multiple: false, value: catList, 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          loadStyle(e); 
         } 
        }] 
       }, 
       editrules: { required: false, custom: true, custom_func: categorycheck } 
      }, 
      { 
       name: 'manufacturer', index: 'manufacturer', align: 'center', editable: true, hidden: false, edittype: 'select', 
       editoptions: { 
        value: manufList, 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          loadStyle(e); 
         } 
        }] 
       }, 
       editrules: { required: false } 
      }, 
      { 
       name: 'style', index: 'style', align: 'center', editable: true, hidden: false, edittype: 'select', 
       editoptions: { 
        multiple: false, value: styleList, 
        dataInit: function (elem) { 
         var v = $(elem).val(); 
         if (v != '') { 
          var data = loadSizes(elem); 
          jQuery('#curruntppeGridgrid').setColProp('sizes', { editoptions: { multiple: true, value: data } }); 
          var data1 = loadUom(elem); 
          jQuery('#curruntppeGridgrid').setColProp('uom', { editoptions: { value: data1 } }); 
         } 
         else { 
          jQuery('#curruntppeGridgrid').setColProp('sizes', { editoptions: { multiple: true, value: {} } }); 
          jQuery('#curruntppeGridgrid').setColProp('uom', { editoptions: { value: {} } }); 
         } 
        }, 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          loadCategoryAndManufacturer(e); 
         } 
        }] 

       }, 
       editrules: { required: true } 
      }, 
      { 
       name: 'uom', index: 'uom', align: 'center', editable: true, hidden: false, edittype: 'select', 
       editoptions: { 
        multiple: false, value: uomfList, 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          setHiddenUom(e); 
         } 
        }] 
       }, 
       editrules: { required: false } 
      }, 
      { 
       name: 'averagelifetime', index: 'averagelifetime', editable: true, align: 'center', sortable: false, editrules: { number: true, maxValue: 9999999.99 }, 
       editoptions: { 
        class: 'validate[custom[number]]', 
        dataEvents: [{ 
         type: 'click', 
         fn: function (e) { 
          $('#formQuickSurvey').validationEngine({ promptPosition: 'bottomLeft', validationEventTrigger: 'keyup' }); 
         } 
        }, 
           { 
            type: 'change', 
            fn: function (e) { 
             setQty(e); 
            } 
           } 
        ] 
       } 
      }, 
      { 
       name: 'averagelifetimeselect', index: 'averagelifetimeselect', editable: true, align: 'center', edittype: 'select', 
       editoptions: { 
        multiple: false, value: avglifetimelist, 
        dataInit: function (elem) { 
         var v = $(elem).val(); 
         if (v != '') { 
          jQuery('#curruntppeGridgrid').setColProp('averagelifetimeselectId', { editoptions: { defaultValue: v } }); 
         } 
        }, 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          setHiddenaveragelifetimeselect(e); 
          setQty(e); 
         } 
        }] 
       }, 
       editrules: { required: false } 
      }, 
      { 
       name: 'qty', index: 'qty', align: 'center', editable: true, editrules: { integer: true, maxValue: 2147483647 }, 
       editoptions: { 
        class: 'validate[custom[numbersOnly]]', 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          calculateannualCost(e); 
         } 
        }, { 
         type: 'click', 
         fn: function (e) { 
          $('#formQuickSurvey').validationEngine({ promptPosition: 'bottomLeft', validationEventTrigger: 'keyup' }); 
         } 
        }] 
       } 
      }, 
      { 
       name: 'cost', index: 'cost', align: 'center', editable: true, editrules: { number: true, maxValue: 9999999.99 }, 
       editoptions: { 
        class: 'validate[custom[number]]', 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          calculateannualCost(e); 
         } 
        }, { 
         type: 'click', 
         fn: function (e) { 
          $('#formQuickSurvey').validationEngine({ promptPosition: 'bottomLeft', validationEventTrigger: 'keyup' }); 
         } 
        }] 
       } 
      }, 
      { 
       name: 'sizes', index: 'sizes', align: 'center', edittype: 'select', classes: 'seteventclickoncurrent', editable: true, editoptions: { 
        multiple: true, value: {}, 
        dataInit: function (elem) { 
         var v = $(elem).val(); 
         if (v != '') { 
          jQuery('#curruntppeGridgrid').setColProp('sizesId', { editoptions: { defaultValue: v } }); 
         } 
        }, 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          setHiddensizes(e); 
         } 
        }] 
       }, 
       editrules: { required: false, custom: true, custom_func: checkCurrentSize } 
      }, 
      { name: 'annualCost', index: 'annualCost', align: 'center', editable: true, editoptions: { readonly: 'readonly' } }, 
      { 
       name: 'vp2', index: 'vp2', align: 'center', editable: true, hidden: false, edittype: 'select', 
       editoptions: { 
        multiple: false, value: vp2fList, 
        dataInit: function (elem) { 
         var v = $(elem).val(); 
         if (v != '') { 
          jQuery('#curruntppeGridgrid').setColProp('vp2Id', { editoptions: { defaultValue: v } }); 
         } 
        }, 
        dataEvents: [{ 
         type: 'change', 
         fn: function (e) { 
          setHiddenvp2(e); 
          validateCategoryandVP2(e); 
         } 
        }] 
       }, 
       editrules: { required: false } 
      } 
     ], 
     cmTemplate: { sortable: false }, 
     width: eval('gridWidth()'), 
     pgbuttons: false, 
     pginput: false, 
     viewrecords: false, 
     //pager: '#curruntppeGridpager', 
     toppager: true, 
     multiselect: true, 
     editurl: 'editsurveyppe', 
     caption: 'Current PPE', 
     //forceFit:true, 
     hiddengrid: true, 
     hidegrid: true, 
     headertitles: true, 
     postData: { 
      appId: function() { return $('#selectApplication option:selected').val(); } 
     }, 
     loadComplete: function() { 
      $('#del_curruntppeGridgrid_top').removeClass('ui-state-disabled');//this is added to enable delete button after record reload 
      if (jQuery('#curruntppeGridgrid').jqGrid('getGridParam', 'gridstate') != 'visible') { 
       $("#curruntppeGridgrid_toppager").hide(); 
      } 
      else { 
       $("#curruntppeGridgrid_toppager").show(); 
      } 
     }, 
     afterInsertRow: function() {//this is added to disable delete button while adding record 
      $('#del_curruntppeGridgrid_top').addClass('ui-state-disabled'); 

     }, ajaxSelectOptions: { cache: false } 
    }); 

    jQuery("#curruntppeGridgrid").jqGrid('navGrid', "#curruntppeGridpager", 
     { cloneToTop: true, position: 'right', edit: false, add: false, del: true, search: false, refresh: false, pgbuttons: false }, 
     {}, {}, { 
      mtype: 'POST', reloadAfterSubmit: true, 
      serializeDelData: function (postdata) { 
       var row = jQuery('#curruntppeGridgrid').getRowData(postdata.id); 
       // append postdata with extra information 
       return { id: postdata.id, oper: postdata.oper, gridId: 'current' }; 
      } 
     }, {}); 

    //top toolbar 
    jQuery("#curruntppeGridgrid").jqGrid('inlineNav', '#curruntppeGridgrid_toppager', { 
     position: 'right', 
     editParams: { 
      aftersavefunc: function() { 
       $("#curruntppeGridgrid").jqGrid().trigger("reloadGrid"); 
       $('#del_curruntppeGridgrid_top').removeClass('ui-state-disabled');//this is added to enable delete button after saveing record 
      }, oneditfunc: function() { 
       $('#del_curruntppeGridgrid_top').addClass('ui-state-disabled');//this is added to disable delete button while editing record 
      }, afterrestorefunc: function() { 
       $('#del_curruntppeGridgrid_top').removeClass('ui-state-disabled');//this is added to enable delete button while cancelling record 
      }, extraparam: { 
       currentApplicationId: function() { return $("#selectApplication option:selected").val(); } 
      } 
     }, 
     "restoreAfterSelect": false 
    }); 

    jQuery('#curruntppeGridgrid').jqGrid('setGroupHeaders', { 
     useColSpanStyle: true, 
     groupHeaders: [{ 
      startColumnName: 'averagelifetime', 
      numberOfColumns: 2, 
      titleText: '<em>Average Lifetime</em>' 
     }] 
    }); 
}); 

回答

1

我認爲這是jqGrid中的一個bug。我發佈了我的建議,如何解決the following bug report中的問題。我建議修改the line的代碼delRowData

if(rowid == $t.p.selrow) {$t.p.selrow=null;} 

下面的代碼

if(rowid == $t.p.selrow) { 
    if ($t.p.multiselect && $t.p.selarrrow.length > 0) { 
     $t.p.selrow = $t.p.selarrrow[$t.p.selarrrow.length-1]; 
    } else { 
     $t.p.selrow = null; 
    } 
} 

你可以找到jquery.jqGrid.src.jshere修改後的版本。該代碼在代碼addRow中包含一些額外的小改進。我描述了我發佈到trirand的the next bug report中的改進。

修訂:該缺陷已經是固定的(見here)在jqGrid的主要代碼,一個可以找到github。所以修補程序將在jqGrid的下一個版本(高於4.4.1)中。

+0

非常感謝Oleg。它在工作,這讓你的生活變得如此簡單。 – roshan

+0

@roshan:不客氣! – Oleg