Программно выбрать все строки в jqGrid? - PullRequest
5 голосов
/ 07 октября 2009

Каков наилучший способ программным образом выбрать все строки в jqGrid, для которого задан множественный выбор?

Код может циклически проходить по всем строкам и выбирать каждую из них, но тогда флажок в заголовке сетки не устанавливается. Я думал о том, чтобы просто вызвать событие clicked флажка строки заголовка, но это сделало бы предположения о базовой реализации jqGrid. Должен быть лучший способ ...

Заранее спасибо!

Ответы [ 6 ]

6 голосов
/ 07 октября 2009

Если вы выберете все строки в множественном выборе jqGrid, щелкнув каждую из них вручную, флажок в заголовке не будет установлен, поэтому я не обязательно ожидаю, что это произойдет, когда вы сделаете это программно (если вы используйте setSelected (rowid, true) для каждой строки, это эквивалентно нажатию на каждую, так как параметр «true» указывает, что событие clicked должно быть запущено для каждой).

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

3 голосов

Я думаю, что нет ничего невозможного, Это альтернативное решение. Вы можете циклически проходить по всем строкам и выбирать каждую из них, затем флажок в заголовке сетки проверяется вручную. Но флажок в заголовке сетки не установлен, если хотя бы один флажок не установлен.

colNames : [ ,'<input type="checkbox" id="cbox" onclick="UI_PaxCheckin.checkBox(this,event)" />',..]

UI_PaxCheckin.checkBox = function(obj,e) {
 e = e||event; 
 e.stopPropagation? e.stopPropagation() : e.cancelBubble = true;
 var grid = $('#jqGridPax');
 if(obj.checked == true){
     UI_PaxCheckin.multiSelectedFlightRowID = []; 
 }
for ( var p = 0; p < grid[0].rows.length -1 ; p++) {
    $('#chkIsSelected_' + p).prop('checked', obj.checked);
    //manual checkbox click event function call
}
$('#cbox').prop('checked', obj.checked);}
2 голосов
/ 07 октября 2009

Как ни странно, в API такой функции нет. Программный выбор флажка «выбрать все» активирует код выбора всего (который вы можете найти в grid.base.js, начиная со строки 1053. В отличие от выбора отдельных строк вручную, это корректно вызовет событие onSelectAll. Итак, да, это делает предположения, но не так много, как в противном случае.: /

1 голос
/ 16 марта 2017

Гораздо лучшее решение, которое фактически нажимает на флажок выбора всех

gridComplete: function(){
    $(this).jqGrid('resetSelection');
    $(this).closest(".ui-jqgrid").find(".ui-th-column:first .cbox").click();
}

или если ваш идентификатор сетки "mygrid"

$("#mygrid").jqGrid('resetSelection');
$("#cb_mygrid").click();
1 голос
/ 03 декабря 2010

Программный выбор флажка «выбрать все» НЕ ВСЕГДА запускает код выбора всех. Нам нужно установить атрибут «флажок» раньше, поэтому будет выбрана правильная ветка метода select all. Вот код, который я использовал с сеткой версии 3.8.1:

$("#cb_my_grid").attr("checked", true);
$("#cb_my_grid").trigger('click');
$("#cb_my_grid").attr("checked", true);
1 голос
/ 26 августа 2010

Да, это правда, что это не очень традиционный подход, и в основном это то, что вы сказали делать, но я обнаружил, что это был самый простой способ выбрать все строки, а также установить флажок заголовка:

  var grid = $("#my_grid");
  grid.resetSelection();
  $('#cb_my_grid').click();
  var ids = grid.getDataIDs();
  for (var i=0, il=ids.length; i < il; i++ ) 
   grid.setSelection(ids[i], false);

Полагаю, строки не выбираются, когда флажок заголовка устанавливается программным способом из-за базовой реализации jqGrid, как вы сказали? Я не знаю, как это работает внизу, но сейчас мне кажется, что это работает сверху.

Основная причина, по которой я хочу убедиться, что в моих сетках установлен флажок заголовка, состоит в том, что пользователь может подсознательно определить, что да, все строки в сетке определенно выбраны прямо сейчас (включая те, которые не видны под текущим представлением прокрутки). ) и не нужно ставить флажок в заголовке, просто чтобы убедиться.

@ Крейг - мне придется попробовать ваш метод, он кажется проще и разумнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...