2012-04-24 40 views
0

目前,我有一個重寫delGridRow調用看起來像這樣(信貸Krams和他的春天教程):如何使用jqGrid,multiselection和Spring序列化刪除數據?

var row = $('#grid').jqGrid('getGridParam','selrow'); 

$('#grid').jqGrid('delGridRow', row, 
     { url:'deleteRequirement.html', 
      recreateForm: true, 
      beforeShowForm: function(form) { 
       //Change title 
       $(".delmsg").replaceWith('<span style="white-space: pre;">' + 
         'Delete selected record?' + '</span>'); 
       //hide arrows 
       $('#pData').hide(); 
       $('#nData').hide(); 
      }, 
      reloadAfterSubmit:true, 
      closeAfterDelete: true, 
      serializeDelData: function (postdata) { 
       var rowdata = $('#grid').getRowData(postdata.id); 
       // append postdata with any information 
       return {id: postdata.id, oper: postdata.oper, reqID: rowdata.reqID}; 
      }, 
      afterSubmit : function(response, postdata) 
      { 
       var result = eval('(' + response.responseText + ')'); 
       var errors = ""; 
        if (result.success == false) { 
        for (var i = 0; i < result.message.length; i++) { 
         errors += result.message[i] + "<br/>"; 
        } 
       } else { 
        $('#msgbox').text('Entry has been deleted successfully'); 
        $('#msgbox').dialog( 
        { title: 'Success', 
         modal: true, 
         buttons: {"Ok": function() { 
          $(this).dialog("close"); 
         } 
        } 
       }); 
      } 
     // only used for adding new records 
     var newId = null; 
     return [result.success, errors, newId]; 
    } 
}); 
else { 
    $('#msgbox').text('You must select a record first!'); 
    $('#msgbox').dialog( 
      { title: 'Error', 
       modal: true, 
       buttons: {"Ok": function() { 
        $(this).dialog("close");} 
       } 
      }); 
} 

爲了增加對多選刪除支持,我改變了「selrow」第一線,這:

var rowList = jQuery("#grid").getGridParam('selarrrow'); 

在此之後,事情開始變得粗略快速。該規範說默認的delGridRow可以接受要刪除的輸入記錄數組。我做了如下改變試圖獲得新的「rowList」可變習慣:

$('#grid').jqGrid('delGridRow', rowList, ... 

我還在打在我的春節,我的控制器URL deleteRequirement.html,但只有最後一個記錄似乎使它。我猜測問題是在serializeDelData部分的postdata準備中,但我還沒有找到正確的方法來準備這個postdata的記錄列表,而不是單個記錄。

任何建議/見解,將不勝感激。

謝謝大家。

回答

2

我自己不使用Spring,但是你的代碼接縫的某些部分對我來說很陌生。

首先您可以使用delGridRowrow代碼中的第一個參數)的兩種形式。它可以是逗號分隔的ID列表或ID數組。如果使用ID數組,則jqGrid將其轉換爲由rowids = rowids.join();以逗號分隔的格式。因此,serializeDelData中的postdata.id格式也可以是逗號分隔的ID列表。

所以,如果你需要支持刪除多行的,你應該

  1. 修改serializeDelData的代碼reqID財產也reqID列表進行發送。相應的代碼可以是
serializeDelData: function (postdata) { 
    var ids = postdata.id.split(','), i, l = ids.length, reqIDList = []; 
    for (i = 0; i < l; i++) { 
     reqIDList.push($(this).jqGrid("getCell", ids[i], "reqID")); 
    } 
    return {id: postdata.id, oper: postdata.oper, reqID: reqIDList.join()}; 
} 
  1. 修改服務器代碼同時支持idreqID以逗號分隔的形式。

afterSubmit回調的你,你的線

// only used for adding new records 
var newId = null; 
return [result.success, errors, newId]; 

您可以修改線以下

return [result.success, errors]; 

,因爲只有數組的前兩個元素通過afterSubmit回調返回會使用。

+0

奇怪的是,我的服務器得到postdata爲「false,false」,而不是我試圖刪除的記錄ID。 相反,可能會更容易使用默認的jqGrid delRowData調用,然後單獨(或者可能通過onClickSubmit調用調用AJAX調用來將所選行發送到服務器? – Raevik 2012-04-26 19:54:12

+0

@Brent:你應該調試問題。首先,您應該在返回之前在'serializeDelData'中包含alert(postdata.id);'和alert(reqIDList.join());'。順便說一下,你使用** jqGrid的最後一個**版本嗎?如果沒有,你應該將'$(this).jqGrid(「getCell」,ids [i],「reqID」)'替換爲'$(「#grid」)。 「)'。 – Oleg 2012-04-26 20:02:07

+0

所以它看起來像postdata.id調用獲取分頁的jqGrid模型id而不是來自記錄本身的reqID值。可能需要調用getRowData來獲取適當的值... 正如您可以想象的那樣,將行58傳遞給服務器對於執行數據庫刪除而不是實際的UID(在這種情況下爲reqID) 。 我的警報產生了:(58,59)和(假,假)。 我正在使用最新版本,但無論如何都要使用$(「#grid」)。我對推送電話的虛假錯誤感到好奇。規範說它需要rowID和列。 – Raevik 2012-04-26 20:28:12

相關問題