2012-01-15 75 views
6

如果使用表格添加行,則下面的代碼將設置新行的默認值。 如果使用工具欄中的jqGrid內聯添加按鈕添加行,則不調用這些方法,並且未設置默認值。如果在jqgrid中使用內聯添加按鈕添加行,如何設置默認值

如何強制內聯添加執行與下面的代碼相同的邏輯?

var lastSelectedRow; 
$grid.navGrid("#grid_toppager", { 
del: true, 
add: true, 
view: true, 
edit: true 
      }, 
      {}, 

     { 
     addedrow: 'beforeSelected', 
     url: '/Grid/Add?_entity=Desktop', 
     beforeInitData: function() { 
     // todo: how to call this method from inline add 
     var rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     if (rowid === null) { 
      alert('Select row before adding'); 
      return false; 
      } 
     }, 

     afterShowForm: function(formID) { 
     // todo: how to set default values as this method sets from inline add 
     var selRowData, 
      rowid = $grid.jqGrid('getGridParam', 'selrow'); 
     $('#' + 'Recordtype' + '.FormElement').val('Veerg'); 
     $('#' + 'Nait2' + '.FormElement')[0].checked = true; 
     selRowData = $grid.jqGrid('getRowData', rowid); 
     $('#' + 'Baas' + '.FormElement').val(selRowData.Baas); 
     $('#' + 'Liigid' + '.FormElement').val(selRowData.Liigid); 
     } 
     ); 


$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      onEdit : onInlineEdit 
     } 
    }, 

    editParams: { 
     editRowParams: { 
      onEdit : onInlineEdit 
      } 
    }, 

    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

function onInlineEdit(rowId) { 
    if (rowId && rowId !== lastSelectedRow) { 
     cancelEditing($grid); 
     lastSelectedRow = rowId; 
    } 
    } 

更新

我試圖代碼

$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      extraparam: { _dokdata: FormData }, 
      onSuccess : function (jqXHR) { 
alert('addp oncuss'); 
       jqXHRFromOnSuccess=jqXHR; 
       return true; 
       }, 
      afterSave: function (rowID) { 
alert('afeesave addp '); 
       cancelEditing($grid); 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       jqXHRFromOnSuccess=null; 
       }, 
      onError: errorfunc, 
      afterRestore : setFocusToGrid, 
      oneditfunc : function (rowId) { 
       var selRowData, selRowId ; 
       if (rowId && rowId !== lastSelectedRow) { 
       cancelEditing($grid); 
       selRowId = $grid.jqGrid('getGridParam', 'selrow'); 
       if (selRowId) { 
        selRowData = $grid.jqGrid('getRowData', selRowId); 
        $('#' + rowId + '_Reanr').val(selRowData.Reanr); 
        } 
       lastSelectedRow = rowId; 
       } 
      } 
     } 
    } 
); 

只有oneditfunc func被調用。如何強制onSuccess,afterSave,onError等方法也被調用?在回答

更新2

我加補丁的jqGrid從GitHub建議,並試圖

$.extend(jQuery.jgrid.inlineEdit, { 
    addParams: { 
    position: "beforeSelected", 
    rowID: '<%= EntityBase.NewRowIdPrefix %>', 
    useDefValues: true, 
    addRowParams: { 
     keys: true, 
     extraparam: { _dokdata: FormData }, 
     onSuccess : function (jqXHR) { 
     jqXHRFromOnSuccess=jqXHR; 
     return true; 
     }, 
     afterSave: function (rowID) { 
       cancelEditing($grid); 
       <% if (Model is RowBase) { %> 
        afterDetailSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } else { %> 
        afterGridSaveFunc(rowID,jqXHRFromOnSuccess); 
       <% } %> 
       jqXHRFromOnSuccess=null; 
       }, 
     onError: errorfunc, 
     afterRestore : setFocusToGrid, 
     oneditfunc : function (rowId) { 
     if (rowId && rowId !== lastSelectedRow) { 
      cancelEditing($grid); 
      lastSelectedRow = rowId; 
      } 
     } 
     } 
    } 
}); 

我此時進入不會終止在線添加。這段代碼中的所有參數都被忽略。

回答

5

您應該使用editoptionsdefaultValue屬性爲新添加的行設置默認值。在當前文檔中,您可以發現該選項僅在Form Editing模塊中有效:

該選項可以是字符串或函數。此選項僅在 表單編輯模塊與添加模式下的editGridRow方法一起使用時有效。如果 定義了輸入元素,則設置此值,如果只有元素爲 爲空。如果用於選擇應該提供的文本而不是密鑰。 同樣當函數被使用時,函數應該返回值。

,但如果你檢查的新addRow方法的代碼,你會看到

  1. useDefValues選項的默認值是true
  2. 不要使用(見here)的defaultValue財產的方法editoptions

已更新:好的!現在我看到你的問題。您在editRowParamsaddRowParams部分設置中僅使用了錯誤的屬性。正確的是:

$grid.jqGrid('inlineNav', topPagerSelector, { 
    addParams: { 
     position: "beforeSelected", 
     rowID: '_empty', 
     useDefValues: true, 
     addRowParams: { 
      keys: true, 
      oneditfunc : onInlineEdit 
     } 
    }, 
    editParams: { 
     keys: true, 
     oneditfunc: onInlineEdit 
    }, 
    add: true, 
    edit: false, 
    save: true, 
    cancel: true 
}); 

而且可以使用新的$.jgrid.inlineEdit功能設置內嵌編輯keysoneditfunc或其他參數。該功能的實現並不完全正確,但您可以從github檢查當前版本(請參閱here),並在您的jquery.jqGrid.src.js版本中進行相同的修改。無論如何,我會推薦在發佈下一個版本的jqGrid後使用$.jgrid.inlineEdit功能。優點是您可以輕鬆設置editRow的獨立於函數調用位置的選項(來自inlineNav'actions'格式化程序或任何其他方式)。

jqGridInlineEditRow事件的特徵(見here瞭解更多信息)可以讓你實現像你現在onInlineEdit事件裏面做什麼,而不oneditfunc使用它只能設置一次行動。

+0

非常感謝。有問題的代碼從當前行中檢索默認值,如果當前行未設置,則不允許添加行。如何使用defaultValue實現這個? – Andrus 2012-01-15 20:45:34

+0

@安德魯斯:完全是代碼做不同的事情。像$('#'+'Recordtype'+'.FormElement')。val('Veerg');'和'$('#'+'Nait2'+'.FormElement')[] = true;'是默認值的純粹設置。由於其他設置,我不明白你爲什麼不在'onEdit'處理程序中進行設置(在你的案例中的'onInlineEdit'函數中)? – Oleg 2012-01-15 21:28:05

+0

我需要從當前行獲取值。我不知道如何獲取onInlineEdit中的當前行值。可能當前已經添加了行,沒有辦法獲得以前的行值。如果沒有當前行,則內聯添加應該被阻止。 onInlineedit不允許加載添加操作,新行已添加。 – Andrus 2012-01-16 20:29:09

相關問題