Asynchronous Delete Row Validation in Shield UI Grid

See how you can implement server-side / asynchronous validation of Grid row deletions

The Shield UI Grid is a powerful data visualization component, perfect for displaying tabular data. It supports plenty of advanced options, among which is editing - creation, updates and deletes of data items.

Shield UI Grid provides a built-in configuration for enabling user confirmation of each item row being deleted. This is an asynchronous operation which occurs on the client side. An example of how it can be set is shown below:

$("#grid1").shieldGrid({
    ...
    editing: {
        enabled: true,
        event: "doubleclick",
        type: "cell",
        confirmation: {
            "delete": {
                enabled: true,
                template: function (item) {
                    return "Delete row with ID = " + item.Id + "?";
                }
            }
        }
    }
    ...
});

Developers who want to perform asynchronous validation, such as one that includes a server-side request and processing, can easily implement it by handling the Grid's command event.

Before a row is being deleted, the Grid component will fire a "command" event with the "delete" command name. When that happens, it can be cancelled, which will stop the processing of the current delete operation, and an asynchronous process can be started.

When the asynchronous process completes, the previously cancelled delete command can be executed by calling the deleteRow() method of the Grid.

A complete example of how this can be implemented is shown below:

events: {
    command: function(e) {
        if (e.commandName == "delete") {
            var grid = this;
                  
            // cancel the delete command
            e.cancel = true;
                  
            // show loading indicator
            grid.loading(true);
                  
            // get the index of the row being deleted
            var rowIndex = e.rowIndex;                 
                  
            // perform some kind of asynchronous validation
            setTimeout(function() {
                // hide the loading indicator
                grid.loading(false);
                    
                // delete the row
                grid.deleteRow(rowIndex);
            }, 3000); // e.g. waits for 3 seconds
        }
    }              
}

More information about the command event and all available commands can be found here.