Ваша основная проблема заключается в том, что вы игнорируете 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