Пользовательский удаляют кнопку в jqGrid

Я хотел бы реализовать свое собственное, удаляют функциональность в jqGrid. Я в настоящее время использую встроенный UI (избранная строка, нажмите trashcan кнопку в нижнем колонтитуле, подтвердите), но я предпочел бы иметь удалить кнопку в каждой строке и реализовывать мой собственный UI для подтверждения.

Я ничего не вижу в API, который позволяет мне исчерпывать удаление к серверу - просто delRowData, который удаляет его на клиенте. Это может быть сделано?

(Я использую компонент ASP.NET, FWIW).

5
задан Herb Caudill 2 March 2010 в 02:33
поделиться

2 ответа

@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");
};
2
ответ дан 18 December 2019 в 14:44
поделиться

В базовом компоненте 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 .

На самом деле я сделал это для своего собственного проекта в ответ на ваш вопрос - хотя у меня было смутное представление о том, как это сделать, прежде чем я увидел вопрос. Итак ... спасибо, что заставили меня это сделать!

10
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: