2010-03-02 102 views
5

我想在jqGrid中實現我自己的刪除功能。我目前正在使用內置的用戶界面(選擇行,按下頁腳中的垃圾桶按鈕,確認),但我更願意在每行都有一個刪除按鈕,並實現自己的用戶界面進行確認。jqGrid中的自定義刪除按鈕

我在API中看不到任何東西,它允許我向服務器發起刪除 - 只有delRowData,它會在客戶端上刪除它。這可以做到嗎?

(我正在使用ASP.NET component,FWIW)。

回答

2

@Erik讓我走上了這條正確的道路。他的解決方案有效,但保留了我想避免的現有僞模式彈出確認UI。

它也不利用JqGrid ASP.NET component提供的服務。只要組件連接到正確配置的數據源(ObjectDataSource,SqlDataSource等),該組件實際上負責所有CRUD操作。

對我來說,這個缺失的部分是組件CRUD操作背後的機制。通過與小提琴手周圍戳我能看到它的相關數據POST到相同的頁面,與jqGrid的對象在查詢字符串的客戶端ID:

MyPage.aspx?jqGridID=ctl00_ctl00_Content_Content_MyJqGrid

刪除,帖子的內容爲@埃裏克描述:

oper=del&id=18

所以我已經能夠複製我自己的工作,讓我保持整個過程的全面控制:

$(".DeleteButton", grid).click(function(e) { 
    var rowID = getRowID(this); 
    $(grid).setSelection(rowID, false); 
    if (confirm('Are you sure you want to delete this row?')) { 
     var url = window.location + '?jqGridID=' + grid[0].id; 
     var data = { oper: 'del', id: rowID }; 
     $.post(url, data, function(data, textStatus, XMLHttpRequest) { 
      $(grid).trigger("reloadGrid"); 
     }); 
    } else { 
     $(grid).resetSelection(); 
    } // if 
}); // click 

getRowID = function(el) { 
    return $(el).parents("tr").attr("id"); 
}; 
10

沒有處理服務器端刪除的基本jqGrid組件的一部分 - 即使您使用內置的delete,它不會爲您刪除它的服務器端,您必須自己處理它。但在這裏是如何設定,讓你的腳本被稱爲當有人點擊您的自定義刪除按鈕:

// your custom button is #bDelete 
$("#bDelete").click(function(){ 

    // Get the currently selected row 
    toDelete = $("#mygrid").jqGrid('getGridParam','selrow'); 

    // You'll get a pop-up confirmation dialog, and if you say yes, 
    // it will call "delete.php" on your server. 
    $("#mygrid").jqGrid(
     'delGridRow', 
     toDelete, 
      { url: 'delete.php', 
      reloadAfterSubmit:false} 
    ); 
}); 

以下信息是通過POST過去你刪除URL

Array 
(
    [oper] => del 
    [id] => 88 
) 

其中id是明顯的你在這個例子中傳入了函數,值爲toDelete

我其實只是爲我自己的項目做過這件事,以迴應你的問題 - 儘管在看到問題之前我有一個模糊的想法。所以......感謝讓我接受它!

+0

@Erik - 感謝您指出我在正確的方向。如果您將它連接到正確配置的SqlDataSource(它還負責更新,插入和選擇),ASP.NET組件實際上會爲您執行刪除操作。 – 2010-03-03 20:14:38

1

另一個解決方案是方案用鼠標點擊刪除圖標(如果存在)。 刪除圖標(實際上是一個div)的id是「del_ [GridId]」。這可能不是一個完全可靠的解決方案,因爲它們可能會改變id命名。但是,你會得到完全相同的行爲(還有更好的確認模式)。

例子:

$('#MyButton').click(function() { $('#del_' + gridId).click(); });