QA@IT
«回答へ戻る

回答を投稿

素のASP.NET(というかWebFormのサーバーコントロール)はPostBackやViewStateでステートフルであろうとします。

その状態更新のために頻繁にサーバー通信を行います。
たとえばチェックボックスであれば、チェックの付け外しのたびにサーバーに通信して状態を更新します。
配置したイメージボタン(サーバーコントロール runat="server"になってると思います)をクリックするたびに再読み込みされるのは同じ理由です。

一方であなたの今のコードは再読み込みされると再度データベースからデータを取得して、GridViewを再作成してしまいます。ソート処理もASP.NETのソート機能を利用しているため、ソートの度に再読み込みされ、やはりGridViewを再作成しています。

これが今起こっていることです。


実装するには

  • イメージボタンを押した際のポストバックでイメージボタンの状態を保管しておいて、GridViewの書き込みの際に利用する。

  • GridView 1ページに収まるのであればソート処理も画像のチェックボックスもASP.NETの機能ではなく、HTML+CSS+javascriptで実装する。

等の方法が考えられます。
イメージボタンの状態を保管しておく方法では状態をどのように保管して置くかがカギになります。一時表や連想配列やViewStateなどいろいろあるとは思いますが、複数ユーザーのアクセスがあることを踏まえたうえでなるべくリソースを圧迫しないものを検討されるといいでしょう。
HTML+CSS+javascriptの方法ではイメージコントロールのようなASP.NETサーバーコントロールを使用しません。最終的にチェックされている情報をどのようにサーバーに返すかという問題も出てきますが、そのあたりは調べてみてください。

素のASP.NET(というかWebFormのサーバーコントロール)はPostBackやViewStateでステートフルであろうとします。

その状態更新のために頻繁にサーバー通信を行います。
たとえばチェックボックスであれば、チェックの付け外しのたびにサーバーに通信して状態を更新します。
配置したイメージボタン(サーバーコントロール runat="server"になってると思います)をクリックするたびに再読み込みされるのは同じ理由です。

一方であなたの今のコードは再読み込みされると再度データベースからデータを取得して、GridViewを再作成してしまいます。ソート処理もASP.NETのソート機能を利用しているため、ソートの度に再読み込みされ、やはりGridViewを再作成しています。

これが今起こっていることです。

----
実装するには

* イメージボタンを押した際のポストバックでイメージボタンの状態を保管しておいて、GridViewの書き込みの際に利用する。

* GridView 1ページに収まるのであればソート処理も画像のチェックボックスもASP.NETの機能ではなく、HTML+CSS+javascriptで実装する。

等の方法が考えられます。
イメージボタンの状態を保管しておく方法では状態をどのように保管して置くかがカギになります。一時表や連想配列やViewStateなどいろいろあるとは思いますが、複数ユーザーのアクセスがあることを踏まえたうえでなるべくリソースを圧迫しないものを検討されるといいでしょう。
HTML+CSS+javascriptの方法ではイメージコントロールのようなASP.NETサーバーコントロールを使用しません。最終的にチェックされている情報をどのようにサーバーに返すかという問題も出てきますが、そのあたりは調べてみてください。