2011-10-30 17 views
5

添加工具欄按鈕用於向jqgrid添加新行。 添加窗體出現包含所有提交的vlaue爲空。 如何設置從添加命令發出時當前/選擇的行的列值中添加表單字段值? 使用json遠程數據。或者,如果這更簡單,如何調用服務器方法傳遞當前/選定的行以檢索從服務器添加表單的默認值?如何在當前行的jqgrid中爲添加表單設置默認字段值

jqgrid也包含隱藏的列。如果可能的話,來自當前行的隱藏列的值也應該發送到添加控制器,如果添加表單被保存的話。

更新

我嘗試用

  afterShowForm: function(formID) { 
      var selRowData, 
       rowid = grid.jqGrid('getGridParam', 'selrow'); 
      if (rowid === null) { 
      // todo: how to cancel add command here 
      alert('Please select row'); 
      return; 
      } 

      selRowData = grid.jqGrid('getRowData', rowid); 
      if (selRowData === null) { 
      alert('something unexpected happened'); 
      return; 
      } 

      $('#' + 'Baas' + '.FormElement', formID).val(selRowData.Baas); 
      } 

應用使用奧列格偉大的建議不斷增加的形式保存後打開。第一次保存後,Baas字段爲空。它看起來像afterShowForm事件只運行一次,而不是每次保存後。如何解決這個問題,以便可以添加具有默認值的多行而不關閉添加表單? 如何取消或不允許添加命令,如果沒有選定的行?

回答

4

如果您需要進行一些初始化動作只對新增的形式,你可以使用至少兩種方法:

  • defaultValue財產功能的editoptions內使用。回調函數defaultValue可以根據所選行的數據爲添加表單的相應字段提供值。爲了達到優化目的,您可以在beforeInitData回調/事件中讀取當前選定行的數據。您只需讀取您需要的數據或與服務器進行同步呼叫即可獲取所需的信息。使用defaultValue屬性的唯一缺點是它使用jQuery.val方法來設置添加表單的所有字段的默認值,但「異常複選框」爲edittype。對於複選框jqGrid設置複選框false0,no,offundefined複選框的檢查屬性在defaultValue屬性返回的值中找不到。所以這種方法不適用於其他編輯類型。例如,它可能會失敗,編輯類型爲custom。使用beforeShowFormafterShowForm。回調函數內部可以設置表單的任何值。您可以通過與相應列的name屬性值相同的字段的id找到網格對應列的字段。

就像你已經知道你可以得到當前選擇行的id與尊重getGridParam,並從選定行

var selRowData, rowid = grid.jqGrid('getGridParam', 'selrow'); 
if (rowid !== null) { 
    // a row of grid is selected and we can get the data from the row 
    // which includes the data from all visible and hidden columns 
    selRowData= grid.jqGrid('getGridParam', 'selrow'); 
} 

其中grid就像是$('#list') jQuery對象,其選擇的主要獲取數據<table>網格的元素。

the demo你可以看到上述第一種方法是如何工作的。

+0

謝謝。在某些情況下,需要爲大查找表中用於外鍵輸入的jqueryUI自動填充字段設置默認值。自動完成是作爲自定義編輯元素實現的。請確認,在這種情況下使用beforeShowForm是否是最好的方法?我們是否應該在其他領域使用beforeShowForm也是爲了避免混合兩種方法來設置默認值?在哪裏可以找到添加表單中設置jqueryui自動填充字段默認值的示例代碼? – Andrus

+0

回答示例中的代碼示例調用'grid.jqGrid('getGridParam','selrow');'兩次 – Andrus

+0

@安德魯斯:我不能說你最好的方法是什麼*。它可以取決於許多參數。 jQuery UI自動完成「源代碼」爲您提供了很多可能性,從而可以從服務器獲取數據,因此您應該選擇哪種方式最適合您的環境*。我剛纔描述了兩種可以很好實施的方法。 – Oleg

相關問題