2009-05-12 16 views
1

DataSetモードでSqlDataSourceのデータにアクセスするGridViewがあります。私はページングを有効にしていますが、それは機能しますが、大規模なデータセットでは、データを取得するのに非常に時間がかかります。SqlDataSourceを使用したGridViewのページング

SqlDatSourceがすべてのデータを取得していて、UIレベルでページされているようです。これは明らかにひどい解決策です。私はTips on speeding up a SqlDataSource?を見てきましたが、それは同じ話題になっているようです - 私はSELECT文にページングコードを実装する必要があるように見えます。私はそれをSProcに取り込むことに反対していませんが、SELECTコマンドをSqlDataSourceに残す方が良いでしょう。

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

これを行う最善の方法はありますか? (もしそうなら、私はどこから始めますか?)あるいは、GridViewのSqlDataSourceから効果的なページングを得るためのよりよい方法はありますか?

(それが重要ならば、私はC#を使用していますが、私はそれが必要ないと思います。)

感謝。

答えて

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

+0

+1正しい方向であれば、より大きな疑問は、ジェネリックページングを提供するための動的ラッパーの作成方法です。 –

関連する問題