2012-02-13 3 views
3

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

Если я выбираю строки с удерживаемой клавишей сдвига, он должен выбирать строки. Я указываю 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

Список limitations текущей реализации дерева Жадность кажется не полным в документации. Если изучить исходный код jqGrid вы оштрафовать the lines который сбрасывает некоторые другие параметры jqGrid:

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

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

Если вам действительно нужна такая функция, вы должны ее реализовать самостоятельно. Для этого вы можете добавить в colModel столбец, который имеет predefined 'флажок, который имеет formatoptions: {disabled: false} в качестве дополнительной опции и реализует поведение выбора, которое вам нужно. См. the answer и this one. Это может потребоваться для выполнения некоторых дополнительных действий в обратном вызове beforeSelectRow.

0

Я не уверен, что это все еще интересно, но сегодня я применил параметр multiselect (Click/Ctrl-Click/Shift-Click) в treegrid, установив атрибут, выбранный ариями (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; 
},