0

jqGridに次の機能が必要です。ユーザーがグリッドのチェックボックスをクリックすると、行が選択されます。その後、ユーザーが[コントロールキー]をクリックしてチェックボックスを選択すると、ユーザーはさらに行数を選択できます。次に、ユーザーがチェックボックスをクリックすると、現在の行が選択されている場合は、現在の行が選択されます。これはjqGridで可能ですか?ただし、セルがクリックされても何も起こりません。チェックボックスからはイベントのみを使用できます。

4

1 に答える 1

0

はい、できるはずです。チェックボックス選択の通常の例を見てみましょう。ただし、期待どおりに SHIFT 選択を実際に処理するわけではありません。

いくつか検索したところ、jqGrid サポート サイトで次のコードが見つかりました。

function multiSelectHandler(sid, e) {
    var grid = $(e.target).closest("table.ui-jqgrid-btable");
    var ts = grid[0], td = e.target;
    var scb = $(td).hasClass("cbox");
    if ((td.tagName == 'INPUT' && !scb) || td.tagName == 'A') {
        return true;
    }
    var sel = grid.getGridParam('selarrrow');
    var selected = $.inArray(sid, sel) >= 0;
    if (e.ctrlKey || (scb && (selected || !e.shiftKey))) {
        grid.setSelection(sid,true);
    } else {
        if (e.shiftKey) {
            var six = grid.getInd(sid);
            var min = six, max = six;
            $.each(sel, function() {
                    var ix = grid.getInd(this);
                    if (ix < min) min = ix;
                    if (ix > max) max = ix;
                });
            while (min <= max) {
                var row = ts.rows[min++];
                var rid = row.id;
                if (rid != sid && $.inArray(rid, sel)<0) {
                    grid.setSelection(row.id, false);
                }
            }
        } else if (!selected) {
            grid.resetSelection();
        }
        if (!selected) {
            grid.setSelection(sid,true);
        } else {
            var osr = grid.getGridParam('onSelectRow');
            if ($.isFunction(osr)) {
                osr(sid, true);
            }
        }
    }
}

それを使用するには、 beforeSelectRow ハンドラーをこの関数に設定できるはずです。元。このようなもの:

$("#gridid").jqGrid({
// Rest of code to configure grid
beforeSelectRow: multiSelectHandler,
// Other handlers/configuration
});
于 2012-04-21T13:51:13.083 に答える