1

DataSet モードで SqlDataSource からデータにアクセスする GridView があります。ページングを有効にして動作しますが、大規模なデータセットではデータをプルするのに非常に長い時間がかかります。

SqlDatSource がすべてのデータを取得し、UI レベルでページングしているようです。これは明らかにお粗末なソリューションです。SqlDataSource の高速化に関するヒントを見てきましたか? それは同じトピックにあるようです-SELECTステートメントにページングコードを実装する必要があるようですが、その方法がわかりません。必要に応じて SProc にプルすることに反対しているわけではありませんが、SELECT コマンドを SqlDataSource に残しておく方がよいでしょう。

MySQL には LIMIT X,Y (X は取得する行数、Y はオフセット) があることを知っています。TOP は同じことをしていないようで、GridView から SqlDataSource にページング情報を取得する方法もわかりません。

それはこれを行うための最良の方法ですか?または、GridView の SqlDataSource から効果的なページングを取得するより良い方法はありますか?

(問題がある場合は C# を使用していますが、そうすべきではないと思います。)

ありがとう。

4

1 に答える 1

1

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 の場合、「次へ」リンクを表示します。

于 2009-05-12T19:04:53.983 に答える