2012-03-04 59 views
2

添加的jqGrid包含colmodel定義的列直列後如何更新列的jqGrid

{"name":"_actions", 
    "formatoptions":{"editbutton":true,"keys":true 
    ,"delbutton":true 
    } }, 

{ "name":"Kood","editable":true,"hidden":true} 

新行被添加到網格按內嵌在工具欄添加按鈕。 保存數據後,控制器返回新的Kood列值。 這個新值應該分配給Kood列。

下面的代碼顯示了我嘗試過的兩種方法,但都失敗了。 Kood列值不變

如何在內聯添加後更新列? 如果使用「保存操作」按鈕保存內嵌添加行,如何更新列?

$grid.jqGrid('inlineNav', '#grid_toppager', { 
    addParams: { 
    addRowParams: { 
      keys: true, 
      // This is called if enter key is pressed to save added row 
      aftersavefunc: afterSaveFuncAfterAdd, 
     } 
    }, 

    editParams: { 
     keys: true, 
     // This is called if saver button in toolbar is pressed on inline add 
     aftersavefunc: afterSaveFuncAfterAdd, 
    }, 
add: true, 
edit: false, 
save: true, 
cancel: true 
}); 

function afterSaveFuncAfterAdd(rowID, response) { 
    var json = $.parseJSON(response.responseText); 
     postData = $grid.jqGrid('getGridParam', 'postData'); 
    // this shows correct value: 
    alert(json.PrimaryKeyValues[0]); 
    // attempt 1: 
    $('#' + rowID + '_Kood').val(json.PrimaryKeyValues[0]); 
    // attempt2: 
    postData['Kood'] = json.PrimaryKeyValues[0]; 
    } 
+0

你使用'loadonce:TRUE'或全工作,只在服務器的數據? – Oleg 2012-03-04 17:15:47

+0

@Oleg:jqgrid只使用json遠程數據。 loadonce:true未使用。添加控制器還會返回新的行ID,使用'$ tr.attr(「id」,json.Id)''正確設置。但列值不能設置。 – Andrus 2012-03-04 17:27:28

回答

5

回調editRowaftersavefunc會後和編輯的調用。目前您將找不到$('#' + rowID + '_Kood')。此外,postData將不會在內聯編輯過程中更改,因此$grid.jqGrid('getGridParam', 'postData')將不會爲您提供有用的信息。

因此,我建議您將editurl作爲響應所需的所有數據發回。例如,具有由服務器計算的默認值的列(如上次編輯時間戳)可以回傳。 Add操作的響應應另外包含由服務器生成的id。您可以使用setRowDatasetCell在收到服務器的響應後修改網格中的數據。

例如,您可以從服務器返回

{"Id": "DB_Id", "Kood": "new Kood value"} 

爲「添加」操作的響應並返回

{"Kood": "new Kood value"} 

上的「編輯」操作的響應。在案件的afterSaveFuncAfterAdd代碼可以像下面

var afterSaveFunc = function (rowId, response) { 
    var data = $.parseJSON(response.responseText); 
    if ($.isPlainObject(data) && typeof data.Kood !== "undefined") { 
     if (typeof data.Id !== "undefined") { 
      // if we have 'Id' column in the grid we have to update the column 
      // together with the value of `Kood` 
      $(this).jqGrid('setRowData', rowId, { Id: data.Id, Kood: data.Kood }); 
      // if we have no additional `Id` we can update the Kood column only with 
      // the statement like below 
      // $(this).jqGrid('setCell', rowId, 'Kood', data.Kood); 

      // in case of "Add" operation we have to update the row Id 
      $('#' + $.jgrid.jqID(rowId)).attr('id', data.Id); 
     } else { 
      $(this).jqGrid('setCell', rowId, 'Kood', data.Kood); 
     } 
    } 
} 
+0

比你非常。有效。 – Andrus 2012-03-05 17:37:37

+0

@安德魯斯:不客氣! – Oleg 2012-03-05 19:08:39