Пейджинг в GridView с использованием SqlDataSource - PullRequest
1 голос
/ 12 мая 2009

У меня есть GridView, который получает доступ к данным из SqlDataSource в режиме DataSet. У меня включена подкачка страниц, и она работает, но для больших наборов данных требуется очень много времени для извлечения данных.

Похоже, что SqlDatSource извлекает все данные, а затем перемещается на уровне пользовательского интерфейса. Это явно паршивое решение. Я смотрел на Советы по ускорению SqlDataSource? , и, похоже, он относится к той же теме - похоже, мне нужно реализовать код подкачки в моем операторе SELECT. уверен, как это сделать. Я не против того, чтобы вытягивать его в SProc, если нужно, но лучше оставить команду SELECT в SqlDataSource.

Я знаю, что в MySQL есть LIMIT X, Y (где X - количество извлекаемых строк, а Y - смещение). Похоже, что TOP не делает то же самое, и я не знаю, как получить информацию о подкачке из GridView в SqlDataSource.

Это лучший способ сделать это? (И если да, то с чего мне начать?) Или есть лучший способ получить эффективный пейджинг из SqlDataSource в GridView?

(я использую C #, если это имеет значение, но я не думаю, что это должно.)

Спасибо.

1 Ответ

1 голос
/ 12 мая 2009

ROW_NUMBER () ваш друг, используйте как в этом примере:

DECLARE @test TABLE (LastName varchar(25),FirstName varchar(25))
INSERT INTO @test values ('Jones','Billy')
INSERT INTO @test values ('Jones','Suzie')
INSERT INTO @test values ('Jones','Beth')
INSERT INTO @test values ('Jones','Ron')
INSERT INTO @test values ('Jones','Dan')
INSERT INTO @test values ('Smith','Abby')
INSERT INTO @test values ('Smith','Debbie')
INSERT INTO @test values ('Smith','Joe')
INSERT INTO @test values ('Smith','Dan')
INSERT INTO @test values ('Brown','Matt')
INSERT INTO @test values ('Brown','Rob')

;WITH TestRank AS
(
    select
        LastName,FirstName, row_number() over(order by LastName,FirstName) AS RowNumber
        from @test
)
SELECT
    LastName,FirstName
    FROM TestRank
    WHERE RowNumber>=3 AND RowNumber<=5
    ORDER BY RowNumber

чтобы приложение отслеживало то, что отображается на странице. Если вы хотите отобразить 10 строк на странице, верните 1-11, отобразите 1-10, если rowcount == 11, отобразите ссылку "next".

...