How to delete rows with local data in jqgrid

前端 未结 1 506
北海茫月
北海茫月 2020-11-30 10:58

jqGrid parameter loadonce: true is used

Selecting rows and pressing delete button

No url is set

How to delete rows in local data only and suppress t

相关标签:
1条回答
  • 2020-11-30 11:28

    You can use delRowData method do delete any local row.

    You can do use delGridRow from the form editing if you need it. I described the way here and used for formatter:'actions' (see here, here and originally here).

    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
        };
    

    and then use

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

    UPDATED: In case of multiselect: true the myDelOptions can be modified to the following:

    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
        };
    

    UPDATED 2: To have keyboard support on the Delete operation and to set "Delete" button as default you can add in the delSettings additional option

    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);
    }
    
    0 讨论(0)
提交回复
热议问题