Получение jqGrid для автоматической фильтрации после того, как я установил текст в поле фильтра - PullRequest
0 голосов
/ 16 сентября 2011

Для моего первого приложения ASP.NET MVC 3 я использую jqGrid для отображения табличных данных, связанных с рецептами.Один или несколько рецептов могут быть связаны пользователем.

Когда я выбираю строку в сетке для рецепта, я отображаю некоторые детали об этом рецепте под ним в другом div, включая названия связанных рецептов.

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

Для каждого из имен моих рецептов я делал что-то вроде этого:

<a size="75" class="relatedrecipe" data-recipename="@item.RecipeName">@item.RecipeName</a>

И затем у меня есть некоторый jQuery, который делает это:

$(function () {
   $('.relatedrecipe').click(function () {
      $('#gs_RecipeName').val($(this).data('recipename'));
   });
}

И это, фактически, заполнит этот вводполе (с идентификатором "gs_RecipeName") с именем моего связанного рецепта, но оно не автоматически фильтрует список рецептов в этот момент.Чтобы заставить его работать, я должен нажать на поле и изменить текст, чтобы вызвать это.

Второй выпуск После решения первого вопроса я хочу очистить все существующиеФильтры, которые могут быть установлены (что привело меня к первоначальному рецепту в первую очередь. Я делаю фильтрацию «И», и, если, скажем, рецепт для Шоколадного пирога связан с рецептом для Пеканового пирога, а пользователь ранее фильтровал доПекановый пирог, отфильтровав «Пекан», мой фильтр не будет отображать этот шоколадный пирог, так как в нем нет пеканов. Имеет смысл? Я думаю, что я хочу сделать, это следующее:

  • Кликает текст.
  • Фильтры очищаются.
  • Имя рецепта автоматически заполняется в соответствующем поле фильтра.
  • Автоматический выбор отфильтрованной строки (оставил это отключенным изначально)

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


Продолжение:

Я изменил свою функцию следующим образом:

$(function () {
   $('.relatedrecipe').click(function () {
      var recipe = $(this).data('recipename');
      setTimeout(function () {
         $("#recipegrid")[0].clearToolbar();
      }, 50);
      setTimeout(function () {
         $('gs_RecipeName').val(recipe);
         $("#recipegrid")[0].triggerToolbar();
      }, 200);
   });
}

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

var firstRowID = $('#recipegrid').getDataIds()[0];
$('#recipegrid').setSelection(firstRowId, true);

, как было упомянуто в SO в качестве средства выбора строки, но это не работает.


Решение для автоматического выбора:

Я немного изменил свой код, и это работает:

$(function () {
   $('.relatedrecipe').click(function () {
      // store off the value of the related recipe I want to switch to
      var recipe = $(this).data('recipename');
      // clear any filters on the grid
      setTimeout(function () {
         $("#recipegrid")[0].clearToolbar();
         // set the recipe filter to the related recipe name and trigger the filtering
         setTimeout(function () {
            $('#gs_RecipeName').val(recipe);
            $('#recipegrid')[0].triggerToolbar();
            // auto-select the first row
            setTimeout(function () {
               var firstRowID = $('#recipegrid').jqGrid('getDataIds')[0];
               $('#recipegrid').setSelection(firstRowId, true);      
            }, 50);
         }, 50);
      }, 50);
   });
}

1 Ответ

1 голос
/ 16 сентября 2011

Полагаю, что вы решите проблему с установкой значения на панели инструментов поиска, если вы наберете $('#gs_RecipeName').trigger('change') сразу после $('#gs_RecipeName').val(...). Если вы используете searchOnEnter: false, этого должно быть достаточно. Если вы решите использовать searchOnEnter: true, вам нужно добавить вызов метода triggerToolbar ($("#grid_id")[0].triggerToolbar()).

Чтобы очистить панель инструментов поиска и обновить сетку, вы можете использовать clearToolbar так же, как triggerToolbar.

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