[ACCEPTED]-JQGrid - Multiselect-multi-select

Accepted answer
Score: 28

[Oct 2011] Updated to use 4.0 API, corrected shift-selection 10 bugs, simplified selection loop. Tested 9 in 4.2.0.


If like me, you needed a proper 8 multiselect in the jqgrid - where ctrl selects 7 a single row at a time, select selects multiple 6 rows and neither clear the selection and 5 selects 1 row - You've found it.

First things first: set multiselect: true in 4 the grid definition (I didn't set any other 3 multiselect options)

Next: In gridComplete: function () {} set grid.jqGrid('hideCol', 'cb'); - this hides 2 the checkboxes if you don't want them.

Finally: The 1 main part

beforeSelectRow: function (rowid, e) {
    if (!e.ctrlKey && !e.shiftKey) {
        $("#grid").jqGrid('resetSelection');
    }
    else if (e.shiftKey) {
        var initialRowSelect = $("#grid").jqGrid('getGridParam', 'selrow');
        $("#grid").jqGrid('resetSelection');

        var CurrentSelectIndex = $("#grid").jqGrid('getInd', rowid);
        var InitialSelectIndex = $("#grid").jqGrid('getInd', initialRowSelect);
        var startID = "";
        var endID = "";
        if (CurrentSelectIndex > InitialSelectIndex) {
            startID = initialRowSelect;
            endID = rowid;
        }
        else {
            startID = rowid;
            endID = initialRowSelect;
        }

        var shouldSelectRow = false;
        $.each($("#grid").getDataIDs(), function(_, id){
            if ((shouldSelectRow = id == startID || shouldSelectRow)){
              $("#grid").jqGrid('setSelection', id, false);
            }
            return id != endID;                        
        });
    }
    return true;
}

The End - Hope that helps

More Related questions