Я хотел бы реализовать свое собственное, удаляют функциональность в jqGrid. Я в настоящее время использую встроенный UI (избранная строка, нажмите trashcan кнопку в нижнем колонтитуле, подтвердите), но я предпочел бы иметь удалить кнопку в каждой строке и реализовывать мой собственный UI для подтверждения.
Я ничего не вижу в API, который позволяет мне исчерпывать удаление к серверу - просто delRowData
, который удаляет его на клиенте. Это может быть сделано?
(Я использую компонент ASP.NET, FWIW).
@Erik направил меня по правильному пути. Его решение работает, но сохраняет существующий псевдомодальный пользовательский интерфейс подтверждения всплывающих окон, чего я хотел избежать.
Он также не использует услуги, предоставляемые JqGrid ASP.NET-компонентом . Компонент фактически выполняет все операции CRUD, если он подключен к правильно настроенному источнику данных (ObjectDataSource, SqlDataSource и т. Д.).
Эта недостающая часть для меня была механикой, лежащей в основе операций CRUD компонента. Поковыряясь с Fiddler, я смог увидеть, что он POST отправляет соответствующие данные на ту же страницу с ClientID объекта JqGrid в строке запроса:
MyPage.aspx?jqGridID=ctl00_ctl00_Content_Content_MyJqGrid
Для удаления содержимое POST соответствует описанию @Erik:
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");
};
В базовом компоненте jqGrid нет части, которая обрабатывает удаление на стороне сервера - даже если вы используете встроенное удаление, это не удаление серверной части для вас, вы должны справиться с этим самостоятельно. Но вот как настроить его так, чтобы ваш скрипт вызывался, когда кто-то нажимает вашу пользовательскую кнопку удаления:
// 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
.
На самом деле я сделал это для своего собственного проекта в ответ на ваш вопрос - хотя у меня было смутное представление о том, как это сделать, прежде чем я увидел вопрос. Итак ... спасибо, что заставили меня это сделать!