Выбор нескольких строк в дереве jqGrid - PullRequest
3 голосов
/ 13 февраля 2012

Есть ли способ выбрать несколько строк в древовидной структуре jqGrid?При одиночном щелчке по любой строке я предоставляю встроенное средство редактирования, а при двойном щелчке я расширяю строку.

Если я выбираю строки с нажатой клавишей Shift, они должны выбирать строки.Я указываю multiselect: true, но он не работает.

rowNum:10,
rowList:[10,20,30],
pager: '#pcolch',
sortname: 'no',
treeGridModel:'adjacency',
autowidth:false,
sortorder: 'desc',
caption:"<a href='#'>Projects</a> > Tasks",
toolbar:[true,"top"],
treeGrid: true,
cellEdit: true,
sortable: true,
shrinkToFit :true, 
//viewrecords: true, 
height:'auto',
ExpandColumn:'name',
cellsubmit : 'clientArray',
multiselect:true,

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

Список ограничений текущей реализации Tree Greed, кажется, не полный в документации. Если вы изучите исходный код jqGrid, вы оштрафуете строки , которые сбрасывают некоторые другие параметры jqGrid:

multiselect = false;
subGrid = false;
altRows = false;
pgbuttons = false;
pginput = false;
gridview = true;
rowNum = 10000; // if rowTotal is null
rowList = [];

Таким образом, текущая реализация Tree Grid не поддерживает выбор нескольких строк .

Если вам действительно нужна такая функция, вы должны реализовать ее самостоятельно. Для этого вы можете добавить в colModel столбец с предопределенным формататором 'checkbox' *1013*, имеющим formatoptions: {disabled: false} в качестве дополнительной опции, и реализовать нужное вам поведение выбора. См. ответ и этот для деталей. Может потребоваться реализовать некоторые дополнительные действия в обратном вызове beforeSelectRow .

0 голосов
/ 08 июля 2015

Я не уверен, что это все еще интересно, но сегодня я реализовал опцию множественного выбора (Click / Ctrl-Click / Shift-Click) в сетке дерева, установив атрибут aria-selected (true / false) и добавив/ удаление класса ui-state-highlight для визуальных эффектов.

Все это происходит в обратном вызове beforeRowSelect, который возвращает false, чтобы предотвратить нормальный обратный вызов выбора строки.

Надеюсь, что это может помочь кому-то еще!Я программирую как пятилетний ребенок, поэтому, пожалуйста, будьте осторожны со мной!: -)

Последнее примечание: переменная lastSelIdx является глобальной переменной, хранящей индекс последней выбранной строки, и ее необходимо объявить вне функции.

beforeSelectRow: function(id, e) {
        var row = $("#" + id);
        var currSelIdx = $("#tree").getInd(id) - 1;
        if (e.ctrlKey) {
                // Ctrl was pressed - Add to selection or remove
                if (row.attr("aria-selected") == "true") {
                        row.removeClass("ui-state-highlight").attr("aria-selected", "false");
                } else {
                        row.addClass("ui-state-highlight").attr("aria-selected", "true");
                }
                lastSelIdx = currSelIdx;
        } else if (e.shiftKey) {
                // Shift was pressed. Select all between last selected and curently selected
                var rows = $(".jqgrow");
                // Select all rows between the last selected
                if (!lastSelIdx) lastSelIdx = 0;
                if (lastSelIdx > currSelIdx) {
                        selmin = currSelIdx;
                        selmax = lastSelIdx;
                } else {
                        selmin = lastSelIdx;
                        selmax = currSelIdx;                        
                }
                for (i = 0; i < rows.length; i++) {
                        if (i >= selmin && i <= selmax) {
                                $(rows[i]).addClass("ui-state-highlight").attr("aria-selected", "true");                                
                        } else {
                                $(rows[i]).removeClass("ui-state-highlight").attr("aria-selected", "false");                                
                        }
                }
        } else {
                // Simple click
                $("tr[aria-selected=true]").each(function() {
                        $(this).removeClass("ui-state-highlight").attr("aria-selected", "false");
                });
                row.addClass("ui-state-highlight").attr("aria-selected", "true");
                lastSelIdx = currSelIdx;
        }
        return false;
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...