コマンドによりセレクト文を動的に変更



SqlDataSourceによりデータベースへ接続してる条件で
(アクセスのデータベースでも同様に利用できます。)
コマンド名によりセレクト文を動的に書き換え、
表示結果を変更します。

以下は表示を変更するためのリンクボタンです。
ページ内の任意の場所へ配置します。

<asp:LinkButton Text="表示テキスト1" CommandName="コマンド名1"
ID="LinkButton0" OnCommand="View0" runat="server" />
<asp:LinkButton Text="表示テキスト2" CommandName="コマンド名2"
ID="LinkButton1" OnCommand="View0" runat="server" />
<asp:LinkButton Text="表示テキスト3" CommandName="コマンド名3"
ID="LinkButton2" OnCommand="View0" runat="server" />
<asp:LinkButton Text="表示テキスト4" CommandName="コマンド名4"
ID="LinkButton3" OnCommand="View0" runat="server" />
<asp:LinkButton Text="表示テキスト5" CommandName="コマンド名5"
ID="LinkButton4" OnCommand="View0" runat="server" />
<asp:LinkButton Text="表示テキスト6" CommandName="コマンド名6"
ID="LinkButton5" OnCommand="View0" runat="server" />
<asp:LinkButton Text="表示テキスト7" CommandName="コマンド名7"
ID="LinkButton6" OnCommand="View0" runat="server" />
↑いくらでも増やせる

以下はセレクト文を書き換えるスクリプトです。

'表示方法の選定部分--------------------------
Protected Sub View0(ByVal sender As Object, ByVal
e As CommandEventArgs)
ViewState("Select") = ""
Select Case e.CommandName
Case "コマンド名1"
SelectTmp = "セレクト文1"
Case "コマンド名2"
SelectTmp = "セレクト文2"
Case "コマンド名3"
SelectTmp = "セレクト文3"
Case "コマンド名4"
SelectTmp = "セレクト文4"
Case "コマンド名5"
SelectTmp = "セレクト文5"
Case "コマンド名6"
SelectTmp = "セレクト文6"
Case "コマンド名7"
SelectTmp = "セレクト文7"
End Select
ViewState("Select") = SelectTmp
MainConnectionLoad()
End Sub

以下がセレクトコマンドを実行する部分です。

'選択のメイン---------------------------------
Protected Sub MainConnectionLoad()
SelectTmp = ViewState("Select")
MainConnection.SelectCommand = SelectTmp
MainConnection.Select(DataSourceSelectArguments.Empty)
End Sub

以下の部分をページの任意の部分へ配置します。

<asp:SqlDataSource ID="MainConnection"
ConnectionString="<%$ ConnectionStrings:接続名 %>"
runat="server"></asp:SqlDataSource>

これで抽出したデータをGridViewなどへ表示すれば
完了です。

この方法でGridViewでページングを有効にする場合注意点がひとつあります。
ページングを行うと次ページでSelectCommandが実行されないので、
ページング不可能になります。

それを解決する方法が以下です。
Protected Sub GridView1_PageIndexChanged
(ByVal sender As Object, ByVal e As System.EventArgs)
MainConnectionLoad()
End Sub
このサブルーチンを一つ追加しておけば、問題なくページングできます。
もちろんGridView内に以下のコマンドを指定しておく必要があります。
onpageindexchanged="GridView1_PageIndexChanged"

対応バージョン:2.0 

記事id:56 / 2542PV

関連記事