2012-04-30 3 views
0

GridViewにコードを設定し、データソースをクエリによって返されたデータセットに設定します。だから明らかにsortingとpagingは、私がdatasourceid = some sqldatasourceを使う場合のように魔法のように動作しません。グリッドビューの並べ替え:毎回再読み込みする必要がありますか?

私はWeb上でこれを行う方法の例をいくつか見つけましたが、それらはすべて毎回クエリを再実行するようです。クエリの内容をビューの状態で保存するべきではありませんか?以前のクエリ結果を取得し、データベースに戻らずに再ソートする方法はありますか? (ビューの状態ですべてのデータを保存していますか?そうであれば、なぜ私はそれにアクセスできないのですか?ユーザーのブラウザにすべて送信し、すべての帯域幅を無駄にする私がページングを許可しようとすると、ユーザーが別のページに行くたびに再度クエリを実行する必要があります。ユーザーが並べ替えてからページを並べ替えると、ソート順が隠しフィールドなどにあることを覚えておく必要があるので、データを再読み込みして並べ替えて、正しいページに移動できます。

データソースコントロールを使用すると、この動作がすべて組み込まれているため、ここでは何か不足していると考えられます。しかし、私が何かを見逃していると、この遅い、ハードな方法でそれを行うすべての例を与え、他の多くのプログラマもそれを見逃しています。

答えて

1

データセットを使用して列またはページをソートするたびにASP.NET GridViewコントロールを使用している場合は、サーバーポストバックを作成しています。この特定のコントロールで並べ替えとページングは​​ "魔法のように"働いたことはなく、ずっと私の悩みの種です。

グリッドを構築しているデータソースを、セッションまたはViewState経由でメモリに保存することで、高速化できます。両方とも長所と短所があり、私はあなたが読むことをお勧めします。

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

+0

「魔法のような」とは、データソースコントロールを使用すると、ページングや並べ替えを実装するためのコードを書く必要がないということです。 。 – Jay

+0

はい、私はセッションデータの使い方を知っていますが、私は本当にこのようなアイデアを嫌いです。データが消えないときにデータを破棄する信頼できる方法はありませんrが必要となるため、永遠に浮かび上がってしまい、ユーザが画面の2つのインスタンスを同時に開くことができれば、問題にぶつかります。ビューステートでの保存は可能ですが、帯域幅は倍になります。ワイヤを介して戻って来るデータを読む時間は、多くの、たぶんほとんどの場合、データベースを再クエリーするのに必要な以上になります。だからそれは可能だと確信しているが、それほど美しいものではない。 – Jay

+0

OK私はあなたが言っていることを見ています...個人的には、データソースコントロールを使用するのが嫌です。なぜなら、ボンネットの下で何が起こっているのか抽象度が高いからです。ViewStateは理想的ではありません。データの破棄をより信頼できるものにするために時間を費やすことができれば、セッションはおそらく道のりです。 – markp3rry

0

はいはい、gridviewは毎回クエリを再実行します。

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

あなたは、ページロードイベントで、何のポストバックがない場合(あなたは、

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

とグリッドを埋める方法でポストバックをチェックすることができるから読むべきクエリを一度に実行することができますセッションを直接実行する必要はありません。

関連する問題