Как удалить строки с локальными данными в jqgrid - PullRequest
7 голосов
/ 23 июля 2011

Параметр jqGrid loadonce: используется true

Выбор строк и нажатие кнопки удаления

URL не указан

Как удалить строки только в локальных данных и подавить это сообщение об ошибке? Можно ли установить фиктивный URL или любую другую идею, чтобы разрешить удаление строки? Было бы хорошо, если бы формы добавления и редактирования могли использоваться также с локальными данными.

            url: 'GetData',
            datatype: "json",
            multiselect: true,
            multiboxonly: true, 
            scrollingRows : true,
            autoencode: true,
            loadonce: true, 
            prmNames:  {id:"_rowid", oper: "_oper" }, 
            rowTotal: 999999999,
            rownumbers: true,
            rowNum: 999999999,

Обновление 1

Из ответа Олега я понял следующее решение:

  1. Отключить стандартную кнопку удаления jqGrid
  2. Добавить новую кнопку удаления на панель инструментов.
  3. С помощью этой кнопки нажмите на вызов события

    grid.jqGrid ('delGridRow', rowid, myDelOptions);

метод. Можно выбрать несколько строк. Как удалить все выбранные строки, этот образец удаляет только одну?

Не лучше ли изменить jqGrid, чтобы кнопки удаления, редактирования, добавления работали без URL? В настоящее время требуется передать фиктивный URL-адрес, который всегда возвращает успех для локального редактирования данных.

1 Ответ

10 голосов
/ 23 июля 2011

Вы можете использовать метод delRowData для удаления любой локальной строки.

Вы можете использовать delGridRow из редактирования формы, если вам это нужно. Я описал способ здесь и использовал для форматера: 'actions' (см. здесь , здесь и первоначально здесь ).

var grid = $("#list"),
    myDelOptions = {
        // because I use "local" data I don't want to send the changes
        // to the server so I use "processing:true" setting and delete
        // the row manually in onclickSubmit
        onclickSubmit: function(options, rowid) {
            var grid_id = $.jgrid.jqID(grid[0].id),
                grid_p = grid[0].p,
                newPage = grid_p.page;

            // reset the value of processing option which could be modified
            options.processing = true;

            // delete the row
            grid.delRowData(rowid);
            $.jgrid.hideModal("#delmod"+grid_id,
                              {gb:"#gbox_"+grid_id,
                              jqm:options.jqModal,onClose:options.onClose});

            if (grid_p.lastpage > 1) {// on the multipage grid reload the grid
                if (grid_p.reccount === 0 && newPage === grid_p.lastpage) {
                    // if after deliting there are no rows on the current page
                    // which is the last page of the grid
                    newPage--; // go to the previous page
                }
                // reload grid to make the row from the next page visable.
                grid.trigger("reloadGrid", [{page:newPage}]);
            }

            return true;
        },
        processing:true
    };

и затем используйте

grid.jqGrid('delGridRow', rowid, myDelOptions);

ОБНОВЛЕНО : В случае multiselect: true myDelOptions можно изменить следующим образом:

var grid = $("#list"),
    myDelOptions = {
        // because I use "local" data I don't want to send the changes
        // to the server so I use "processing:true" setting and delete
        // the row manually in onclickSubmit
        onclickSubmit: function(options) {
            var grid_id = $.jgrid.jqID(grid[0].id),
                grid_p = grid[0].p,
                newPage = grid_p.page,
                rowids = grid_p.multiselect? grid_p.selarrrow: [grid_p.selrow];

            // reset the value of processing option which could be modified
            options.processing = true;

            // delete the row
            $.each(rowids,function(){
                grid.delRowData(this);
            });
            $.jgrid.hideModal("#delmod"+grid_id,
                              {gb:"#gbox_"+grid_id,
                              jqm:options.jqModal,onClose:options.onClose});

            if (grid_p.lastpage > 1) {// on the multipage grid reload the grid
                if (grid_p.reccount === 0 && newPage === grid_p.lastpage) {
                    // if after deliting there are no rows on the current page
                    // which is the last page of the grid
                    newPage--; // go to the previous page
                }
                // reload grid to make the row from the next page visable.
                grid.trigger("reloadGrid", [{page:newPage}]);
            }

            return true;
        },
        processing:true
    };

ОБНОВЛЕНО 2 : чтобы иметь поддержку клавиатуры для операции удаления и установить кнопку "Удалить" по умолчанию, вы можете добавить в delSettings дополнительную опцию

afterShowForm: function($form) {
    var form = $form.parent()[0];
    // Delete button: "#dData", Cancel button: "#eData"
    $("#dData",form).attr("tabindex","1000");
    $("#eData",form).attr("tabindex","1001");
    setTimeout(function() {
        $("#dData",form).focus(); // set the focus on "Delete" button
    },50);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...