2010-09-07 3 views
1

Я много работал с JQGrid и рекомендовал его всем. Единственная функция, которая мне не очень нравится, - это встроенный мультиселектор, который не использует специальные клавиши, такие как shift и ctrl, не дает вам большого контроля и сил, чтобы показывать.JQGrid onselectrow events - custom multiselect

Я хотел бы реализовать свой собственный мультиселект следующим образом: В onSelectRow- проверьте, если сдвиг или ctrl удерживается, добавьте идентификатор строки в массив и выберите его в сетке. если они не удерживаются, очистите массив и добавьте новый идентификатор строки и выберите его в сетке.

Это достаточно просто реализовать, кроме Мне нужно событие в onSelectRow, чтобы проверить, сохранены ли ключи. Я бы предпочел не прикладывать событие keydown и keyup к самому основному документу.

onSelectRow: function (id) { 
      event=??? 
      if (!event.shiftKey && !event.ctrlKey) { 

      } 
      else { 

      } 
} 

С уважением, Байрон Кобб.

EDIT: Решение -

После ввода Oļegs, я сделал следующее.

  1. Набор multiselect: true в определении сетки
  2. Скрытого столбец флажка в gridComplete, установив $("#myGrid").jqGrid('hideCol', 'cb');
  3. Проверены на клавишу Ctrl самого (не используя ключи: «ctrlKey») перед выбирать и очищая выбор, если клавиша ctrl не нажимается.
  4. Позже, используя массив выбора при необходимости - var SelectedRows = $("#myGrid").jqGrid('getGridParam', 'selarrrow');

beforeSelectRow: function (rowid, e) { 
      if (!e.ctrlKey) { 
       $("#myGrid").resetSelection(); 
      } 
      return true; 
     }, 

ответ

2

Since the version 3.5.3 Служба поддержки jqGrid beforeSelectRow событие, событие, которое вам нужно, и которые будут вызваны прежде onSelectRow.

Возможно использование multikey варианта jqGrid и сокрытия псевдо-колонки с именем «КБ»

$("#mygrid").jqGrid('hideCol','cb'); 

(CB - комбо-боксы, см http://www.trirand.com/blog/?page_id=393/help/multiselect-without-checkboxes-1/) поможет вам реализовать в jqGrid на поведение выбора строки, которое вы хотите.

ОБНОВЛЕНО: Я полагаю, вы знаете, что $("#mygrid").jqGrid('getGridParam','selarrrow') может быть использован, чтобы получить массив идентификаторов всех выбранных строк, но быть уверенным, я ввожу информацию также.

+0

Еще раз спасибо. У меня есть версия, работающая в beforeSelectRow. Попытка использовать мультиселекцию по умолчанию с помощью multikey: «ctrlKey» вызывает только onSelectRow, если ctrl удерживается нажатой - не следует ли очистить мультиселекцию и начать новый выбор? – Bob

+0

В моем beforeSelectRow я установил его, чтобы он всегда возвращал true, но с multiselect и multikeys (когда ctrl не удерживается) все еще не вызывает onSelectRow – Bob

+0

@Byron Cobb: Поздравляем! Мне кажется, что поведение, которое вы внедрили, может быть интересным для других пользователей jqGrid. Вы можете добавить свой вопрос с кодом для совместного использования решения с другим. Кроме того, вы можете разместить его также в http://www.trirand.com/blog/?page_id = 393/feature-request/и, вероятно, он будет частью следующей версии jqGrid. – Oleg