Добавить пейджинг для JqGrid - PullRequest
0 голосов
/ 12 декабря 2011

я пытаюсь добавить jQuery Grid в мое приложение (C # и Asp.net), используя примеры, представленные в некоторых блогах, с возможностью использовать данные Json, отправленные Webservice.Теперь попытался добавить нумерацию страниц для сетки и получил удар. Сценарий выглядит так:я что-то пропустил?

Спасибо, Сэмюэль

1 Ответ

3 голосов
/ 13 декабря 2011

Ваша основная проблема заключается в том, что вы игнорируете pData из getData, который может быть перенаправлен на ваш веб-сервис ASMX.

Вы используете очень старый шаблон для вашей jqGrid.Текущая версия jqGrid теперь 4.3, и вы по-прежнему используете imgpath, который уже устарел в версии 3.5 (см. документацию ).Очень старая версия jqGrid не имела хорошей поддержки для вызова Web-сервисов, но даже в то время уже можно было использовать методы addJsonData и addXmlData для более эффективного добавления данных, как вы делаете в отношении addRowData.Это задокументировано здесь .

Я рекомендую вам лучше вместо изменения функции getData использовать datatype: 'json' вместо datatype в качестве функции.В старой демоверсии , например, вы можете найти пример, как реализовать это точно.В другом ответе вы можете найти пример использования параметра loadonce: true в случае, если вы предпочитаете не реализовывать подкачку данных на сервере и вместо этого хотите отправить все данные сетки на клиентскую сторону иПозвольте jqGrid делать пейджинг, сортировку и фильтрацию данных для вас на стороне клиента.Он может работать эффективно только с относительно небольшим числом строк (например, несколько сотен строк).

ОБНОВЛЕНО : Если вы используете SqlDataReader для получения данных из базы данных, вы можете создатьОператор SQL (SqlCommand) основывается на параметрах rows и page, которые вы получаете от сервера.

В большинстве случаев вам необходимо запросить данные, которые имеют уникальные идентификаторы.Таким образом, вы можете реализовать пейджинг с использованием конструкций SELECT TOP и LEFT OUTER JOIN.Давайте я объясню это на примере.Например, вам нужно запросить продукт по цене из таблицы dbo.Products базы данных Northwind .Для получения первой страницы данных вы можете использовать

SELECT TOP(10) ProductID, ProductName, UnitPrice FROM dbo.Products

, где 10 вы должны заменить на значение параметра rows.Чтобы получить другую страницу, определенную параметром page, вам нужно пропустить (page-1)*rows элементов и получить следующие топовые page элементов.Используя общее табличное выражение (CTE) синтаксис, вы можете легко написать оператор:

WITH GetAll (Id,ProductName,UnitPrice) AS (
    SELECT ProductID,ProductName,UnitPrice FROM dbo.Products
), GetTop (Id,ProductName,UnitPrice) AS (
    SELECT TOP(20) * FROM GetAll
), GetNext (Id,ProductName,UnitPrice) AS (
    SELECT TOP(10) a.* FROM GetAll AS a
        LEFT OUTER JOIN GetTop AS t ON t.Id = a.Id
    WHERE t.Id IS NULL
)
SELECT * FROM GetNext

Вы должны просто заменить 10 и 20 в двух местах выше на rowsи (page-1)*rows.Если у вас есть база данных, которая не поддерживает общее табличное выражение (CTE), вы можете переписать тот же запрос с учетом подзапросов:

SELECT TOP(10) a.* FROM (SELECT ProductID,ProductName,UnitPrice FROM dbo.Products)
        AS a LEFT OUTER JOIN
            (SELECT TOP(20) ProductID,ProductName,UnitPrice FROM dbo.Products) AS t
                ON t.ProductID = a.ProductID
WHERE t.ProductID IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...