Я использую jqGrid для отображения данных, которые извлекаются с помощью NHibernate. jqGrid делает paging для меня, я просто говорю NHibernate, чтобы получить «счетные» строки, начиная с «n».jqGrid/NHibernate/SQL: перейти к выбранной записи
Кроме того, я хотел бы выделить конкретную запись. Например, в списке сотрудников я хотел бы, чтобы конкретный сотрудник (id) был показан и предварительно выбран в таблице.
Проблема в том, что этот сотрудник может находиться на не текущей странице. Например. Я показываю 20 строк из 0, но «выделенный» сотрудник - № 25 и находится на второй странице.
Можно передать начальную страницу в jqGrid, поэтому, если я каким-то образом использую NHibernate, чтобы найти, на какой странице включен «выделенный» сотрудник, он просто перейдет к этой странице, а затем я буду использовать .setSelection (id) метод jqGrid.
Итак, проблема сужается до этого: учитывая конкретный поисковый запрос, подобный приведенному ниже, как я могу сообщить NHibernate, чтобы вычислить страницу, где «подчеркнул» сотрудник?
Образец запроса (упрощенный):
var query = Session.CreateCriteria<T>();
foreach (var sr in request.SearchFields)
query = query.Add(Expression.Like(sr.Key, "%" + sr.Value + "%"));
query.SetFirstResult((request.Page - 1) * request.Rows)
query.SetMaxResults(request.Rows)
Здесь, мне нужно изменить (рассчитать) request.Page так, что она указывает на страницу, где находится request.SelectedId.
Кроме того, одна интересная вещь: если порядок сортировки не определен, получаю ли я те же результаты, когда я дважды запускаю поисковый запрос? Я бы сказал, что SQL Server может оптимизировать запрос, потому что порядок не определен ... в этом случае я получаю только ожидаемый результат, если я вытащил ВСЕ данные запроса один раз, а затем программно на C# указанная часть результатов запроса - так что второй запрос не возникает. Конечно, это будет намного медленнее.
Или, есть ли другой способ?
Не знаю, как я могу получить количество заказов до ид? Если запрос отсортирован по id, что легко, но он обычно сортируется по имени или тому подобное ... В настоящее время я собираюсь получить только список идентификаторов с сервера (при сортировке и фильтрации) и сделать IndexOf (id) там , – queen3
, если он отсортирован по имени, вам нужно найти имя для идентификатора и ограничить строки меньше или больше (в зависимости от направления сортировки), которые называют и подсчитывают эти строки. – dotjoe
И если есть несколько одинаковых имен? Это дорога в ад ;-) – queen3