0

クエリによって返されたデータセットにデータソースを設定して、GridView にコードを設定しています。したがって、datasourceid = some sqldatasource を使用する場合のように、並べ替えとページングが魔法のように機能するだけではないようです。

ウェブ上でこれを行う方法の例をいくつか見つけましたが、それらはすべて毎回クエリを再実行するようです。クエリの内容をビューステートに保存するべきではありませんか? データベースに戻らずに、以前のクエリ結果を取得して再ソートする方法はありますか? (すべてのデータをビュー ステートに保存しているのですか? もしそうなら、なぜ私はそれに到達できないのですか? すべてをユーザーのブラウザに送信し、すべてを送り返し、すべての帯域幅を浪費するのはかなりばかげているようです。たどり着く方法。)

また、ページングを許可しようとすると、ユーザーが別のページに移動するたびにクエリを再実行する必要があるようです。また、ユーザーが並べ替えてからページを表示する場合、非表示フィールドなどの並べ替え順序を覚えておく必要があるため、データを再読み取りし、再並べ替えしてから、正しいページに移動できます。

データ ソース コントロールを使用すると、このすべての動作が組み込まれていることを考えると、ここで何かが欠けていると思います。しかし、このように遅くて難しい方法でそれを行うすべての例を考えると、私が何かを見逃している場合、他の多くのプログラマーもそれを見逃しています.

4

2 に答える 2

2

データ セットを介して列またはページを並べ替えるたびに ASP.NET GridView コントロールを使用している場合は、サーバー ポストバックを作成しています。この特定のコントロールを使用した並べ替えとページングは​​、「魔法のように」機能したことがなく、長い間私のバグベアでした。

セッションとして、または ViewState を介して、グリッドを構築しているデータ ソースをメモリに保存することで、作業を高速化できます。どちらも一長一短ありますので、一読をお勧めします。

可能であれば、ASP.NET GridView を忘れて、jQuery jqGrid などのクライアント側ソリューションを検討することをお勧めします。AJAX 呼び出しを使用して並べ替えとページングを行うため、はるかに高速で、頭痛の種も少なくなります。唯一の欠点は学習曲線ですが、長期的にはそれだけの価値があると信じています.

于 2012-04-30T16:05:47.893 に答える
0

はい、グリッドビューは毎回クエリを再実行します。

クエリに時間がかかりすぎる場合は、データをセッションまたは ViewState に手動で保存できます。そして、グリッドに入力するアルゴリズムでは、クエリを実行する代わりに、グリッドを直接読み取るだけです。

ページ読み込みイベントで、ポストバックがないときにクエリを 1 回実行できます (ポストバックを確認するには、

if (!Page.IsPostBack){
    //Run the query and save it to the session
}

グリッドを設定するメソッドは、セッションから直接読み取る必要があります。クエリを再度実行する必要はありません

于 2012-04-30T17:30:37.207 に答える