Ссылка на подсетку в onSelectRow? - PullRequest
0 голосов
/ 26 апреля 2011

У меня есть многоотборный jqGrid с множественным выбором grid-as-subgrid. Как получить ссылку на дочернюю сетку в событии onSelectRow для родительской сетки?

По сути, мне нужно сделать следующее:

  1. Развернуть подсеть (чтобы загрузить ее данные с сервера)
  2. Получить ссылку на эту подсеть
  3. С помощью ссылки проведите цикл по строкам и установите для каждой из них значение selected (Для строк, которые имеют собственную вложенную сетку, это вызовет их onSelectRow и повторит процесс. Не волнуйтесь, сетка не глубиной более 3 гнезд.)

Этим утром я просматриваю различную документацию , но до сих пор не заметил, что мне нужно, чтобы это произошло. Может я просто упускаю очевидное? Или, может быть, для этого потребуется немного больше ума?

Я вижу, как описанный выше шаг 3 можно выполнить, начиная с getRowData() и просматривая результаты с setSelection(). Я использую их в другом месте кода, и они отлично работают. Но шаги 1 и 2 выше - вот где я застрял на данный момент.

Редактировать: Следуя @ ответу Олега ниже, я немного больше посмотрел на синхронизацию усилий между событием onSelectRow родительской сетки и событием subGridRowExpanded. Вот развернутая версия того, что я сейчас тестирую:

onSelectRow: function(id, status) {
  // Automatically expand the sub-grid (to load the data) and select the rows in that grid
  autoSelecting = true; // autoSelecting is a global variable normally set to false
  $('#mainGrid').expandSubGridRow(id);
}
subGridRowExpanded: function(subgrid_id, row_id) {
  //... build the sub-grid, works fine (an artifact of which is a subgrid_table_id)
  // If this grid was auto-expanded to be auto-selected, select all its rows
  if (autoSelecting) {
    var sdata = $('#' + subgrid_table_id).getRowData();
    for (var i = 0; i < sdata.length; i++) {
      $('#' + subgrid_table_id).setSelection(sdata[i].Id);
    }
    autoSelecting = false;
  }
}

Здесь происходит несколько вещей, когда я возиться с этим:

  • Если я перехожу через FireBug для отладки, выборки и подвыборы работают правильно. Однако, если я уберу точки останова и попробую это в режиме реального времени, подвыборов не произойдет. Подсетка расширяется, но ее строки не выделяются. Я полагаю, что где-то есть проблема с синхронизацией.
  • Я пока не учел каскадного отмены выбора.
  • Если подсетка уже расширена, выбор не будет каскадным.

1 Ответ

1 голос
/ 26 апреля 2011

Внутри loadComplete обработчика событий сетка загружена, и вы можете выполнять некоторые дополнительные действия, такие как развертывание некоторых строк.

  • Вы можете развернуть подсеть относительно expandSubGridRow method.
  • Чтобы получить ссылку на подсетку, сначала необходимо создать подсеть .Таким образом, лучшее место для ссылки на сетку - это событие subGridRowExpanded.Вы не опубликовали код JavaScript, который используете, поэтому трудно описать все более точно.
  • Чтобы выбрать все строки, вы можете использовать setSelection в цикле или использовать код, подобный $('.cbox', myGrid[0]).trigger('click');.другой другой вариант, как сделать то же самое.Если вы увидите, что у вас есть узкое место в производительности, тогда я мог бы описать, как вы можете сделать этот шаг более эффективным.

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

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