2013-08-16 71 views
0

我正在使用jqGrid PHP並添加一個操作列。 編輯工作正常,但一旦保存行,網格不會重新加載。 當我手動刷新網格時,顯示更新的信息。如何在內聯編輯後重新格式化網格?

我曾嘗試向addCol添加編輯選項(請參閱下文),但我在某處閱讀editOptions僅適用於表單編輯。看看文檔,似乎我可以使用onSuccess或afterSave參數,但我不知道如何將reloadAfterSubmit方法添加到PHP中的這些參數中的任何一個。

$grid->addCol(array( 
    "name"=>"Click to Edit", 
    "formatter"=>"actions", 
    "editable"=>false, 
    "sortable"=>false, 
    "resizable"=>false, 
    "fixed"=>true, 
    "width"=>45, 
    "loadonce"=>false, 
    "formatoptions"=>array("keys"=>true, "editbutton"=>true, "delbutton"=>false,"editOptions"=>array("reloadAfterSubmit"=>true)) 
    ), "first"); 

對此的任何幫助將不勝感激。

+0

主持人改變了我的標題,但我特別尋求幫助PHP版本的jqgrid。此外,我應該注意到,我的網格中有列是根據其他列中的值進行計算的,這樣當列更改時,其他列也應該更改....因此需要重新加載網格。點擊網格左下方的刷新按鈕即可更新網格。我正在尋找按下該刷新按鈕的程序化等價物。 – xjoaniex

回答

0

我正在使用jQuery和jqGrid的單元格編輯功能,在離開每個單元格時將新的單元格值提交給服務器。在我的特殊應用程序中,當單元格更改時,它會影響同一行中的其他(計算)列,並可能影響其他行,因此我需要更新可能遍佈網格的值。

在我的情況下,當提交單元格和數據庫更新時,計算本身在服務器上執行,因此我需要獲取更新的數據以更新網格。我想盡可能快地編輯單元格,但也保持行更新。我也只想更新由服務器確定的已修改的行。我也想要一些通用和可重用的東西。

我不知道這是如何轉化爲PHP,但這是我在JavaScript中做的。

var xhrUpdate = null; 

// Handle jqGrid's afterSubmitCell. 
$("#someGridId").jqGrid(
    "setGridParam", 
    "afterSubmitCell", 
    function (response, rowid, name, val, iRow, iCol) { 

     // If an ajax request is already in progress from the last cell edit, 
     // abort it since the data is now moot with the new cell update. 
     // Sorry server, nobody's listening! 
     if (xhrUpdate != null) { 
      xhrUpdate.abort(); 
      xhrUpdate = null; 
     } 

     // Call the generic grid update function (see below) asynchronously. 
     xhrUpdate = updateGrid(
         "someGridId", 
         "someUpdateUrl", 
         { someParam: someParamValue, ... }, 
         "someIDFieldThatIdentifiesTheGridRow", 
         true); 

     // Return success. 
     return [true, ""]; 
    }); 

// This function updates a jgGrid which already contains data. 
// It will only update the rows and columns that are returned 
// from the server. 
function updateGrid(grid_id, url, data, idField, async) { 
    var grid = $("#" + grid_id) 
    return $.ajax({ 
       async: async, 
       type: "GET", 
       datatype: "json", 
       url: url, 
       data: data, 
       success: function (result) { 
        // Loop over the returned rows. 
        $.each(result, function (index, row) { 
         // Loop over the returned fields in each row. 
         $.each(row, function (key, value) { 
          // Set the corresponding cell value. 
          // This won't touch any cell's that aren't 
          // represented in the JSON data. 
          grid.jqGrid("setCell", row[idField], key, value); 
         }); 
        }); 
       } 
      }); 
} 

注意事項:

1)這肯定將在服務器上的負載。

2)異步,這不處理細胞數據提交錯誤的細胞數據或其他異常的服務器響應。它非常樂觀,但如果需要的話可以處理這些問題。

3)服務器需要智能返回適當的數據,或者您可以返回所有內容。

對不起,這不是PHP,但我希望這可以幫助。

相關問題