Search code examples
jqgridfree-jqgrid

Which event gets fired when delete row occurs?


Grid contains after save row event "jqGridInlineAfterSaveRow" which works if you edit or add row.

                //--Bind events...
            console.log('Bind events...');
            $("#jqGrid").bind("jqGridInlineAfterSaveRow",function (e, rowid, jqXhrOrBool, postData, options) {
                console.log('EVENT:jqGridInlineAfterSaveRow');
                var item = $(this).jqGrid('getLocalRow', rowid);
                console.log(item);
                console.log('BEFORE:');
                saveObject(item);
                console.log('AFTER:');
            }); 

What is name of the event for delete row? i need to bind my JS function for delete row.

UPDATE 1 I am trying following option now, but no luck...

                    }).jqGrid("navGrid", "#jqGridPager", {edit: false, add: false, del: false, refresh: false, view: false,search: false,
                                                      delfunc: function (rowids) {
                                                          console.log(rowids);
                                                      }
                                                     })

UPDATE 2 I think issue is with delete buttons at row level not at footer see the screenshot [enter image description here][1]

                        data:rdata,
                    colModel: [
                        {
                            label: "",
                            name: "",
                            width: 70,
                            formatter: "actions",
                            formatoptions: {
                                keys: true,
                                editOptions: {},
                                addOptions: {},
                                delOptions: {                        delfunc : function (id){
                                    console.log(">>>>>>>>>>>>>>>>1");
                                }}
                            }       
                        },

UPDATE 3 Based on Oleg's input, i have changed the code as following:

                $("#jqGrid").bind("jqGridAfterDelRow",function (e, rowid, jqXhrOrBool, postData, options) {
                console.log('EVENT:jqGridAfterDelRow');
                console.log(rowid);
                var item = $(this).jqGrid('delRowData ', rowid);
                console.log(item);
                console.log('BEFORE:');

                console.log('AFTER:');
            });   

But now, i am not getting deleted row object??? Actually, i need to get the some of the fields from deleted row e.g. ID. and above binding function will in turn call server side ajax function.

UPDATE 4 Thanks to Oleg for supporting beyond... Here is the code i have mashup from one of the answers from him.

                        colModel: [
                        {
                            label: "",
                            name: "",
                            width: 70,
                            formatter: "actions",
                            formatoptions: {
                                keys: true,
                                editbutton : true, 
                                delbutton : true, 
                                editOptions: {},
                                addOptions: {},
                                delOptions: {
                                    onclickSubmit: function(options, rowid) {
                                        console.log("delOptions::onclickSubmit"); 
                                        var grid_id = $.jgrid.jqID(grid[0].id);
                                        var grid_p = grid[0].p;
                                        var newPage = grid[0].p.page;
                                        var rowdata = grid.getLocalRow(rowid);

                                        // DELETE GRID LOCAL 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
                                }
                            }       
                        },

Solution

  • You can use "jqGridAddEditAfterComplete" event, which will be triggered after deleting of rows by delGridRow, or you can use "jqGridAfterDelRow" alternatively, because delGridRow calls delRowData internally and jqGridAfterDelRow will be triggered by delRowData.