DataGridに絞込み機能を追加したサンプル

図 DataGridに絞込み機能を追加したサンプル
このサンプルは、親ウィンドウのDataGridに表示されているレコードを絞り込むことができます。DataGridに表示するレコードを絞り込むには、親ウィンドウから検索(フィルタ)ボタン
をクリックします。検索ボタンをクリックすると、子ウィンドウが表示されます。
検索条件(フィルタ条件)は、得意先テーブルの得意先ID、得意先名、役職、都道府県のカラムに対して設定することができます。たとえば、都道府県に検索条件を設定するには、都道府県のドロップダウンリストから条件式(比較演算子)を選択します。ドロップダウンリストに表示される条件式は、カラムのデータ型により異なります。条件式からBetween、Not Betweenを選択したときは、範囲(開始値/終了値)を入力します。In、Not Inを選択したときは、「埼玉県,千葉県」のようにコンマで区切って入力します。Like、Not Likeを選択したときは、「%課長%」のようにワイルドカード(%)を使用します。文字型のカラムに条件式の値を入力するとき、値を引用符で囲む必要がありません。引用符は、システムが自動的に付加します。
検索条件から複数のカラムを選択したときは、ドロップダウンリストから論理演算子(OR/AND条件)を選択します。デフォルトでは、OR条件で検索します。OR条件のときは、いずれかの条件を満足したときにレコードが抽出されます。AND条件のときは、すべての条件を満足したときにレコードが抽出されます。
検索条件を選択したら、最後に[検索]ボタンをクリックすると、親ウィンドウのDataGridに検索結果が表示されます。検索条件をリセットするときは、[クリア]ボタンをクリックします。
表 比較演算子と使用可能なデータ型 (○:使用可能、X:使用不可)
|
比較演算子 |
文字型 |
数値型 |
使用例 |
|
Equal to |
○ |
○ |
Ken='埼玉県', CustomerID=5 |
|
Less than |
X |
○ |
CustomerID < 5 |
|
Greater than |
X |
○ |
CustomerID > 5 |
|
Between |
○ |
○ |
CustomerID Between 1 and 5 |
|
In |
○ |
○ |
Ken In ('埼玉県','千葉県') |
|
Is Null |
○ |
○ |
Ken Is Null |
|
Not Equal to |
○ |
○ |
Not Ken='埼玉県', Not CustomerID=5 |
|
Not Less than |
X |
○ |
Not CustomerID < 5 |
|
Not Greater than |
X |
○ |
Not CustomerID > 5 |
|
Not Between |
○ |
○ |
CustomerID Not Between 1 and 5 |
|
Not In |
○ |
○ |
Ken Not In ('埼玉県','千葉県') |
|
Is Not Null |
○ |
○ |
Ken Is Not Null |
|
Like |
○ |
X |
Ken Like '%県', ContactTitle Like '%長%' |
|
Not Like |
○ |
X |
Ken Not Like '%県', ContactTitle Not Like '%長%' |
◆プログラムPopupSearch.aspxのポイント
¶ポイント1 検索条件によってTextBoxの個数を変えるには
このサンプルでは、検索条件のDropDownListから選択した比較演算子によって1個、または2個のTextBoxを表示します。条件によって異なる個数のTextBoxを表示するにはPanelを使用すると便利です。Panel1には1個のTextBox、Panel2には2個のTextBoxを定義します。1個のTextBoxを表示するときは、Panel1のVisibleプロパティをTrueに設定します。2個のTextBoxを表示するときは、Panel2のVisibleプロパティをTrueに設定して切り替えます。
¶ポイント2 DropDownListに異なるアイテムを表示するには
このサンプルでは、得意先ID、都道府県などの条件式(比較演算子)をDropDownListに表示しています。条件式は、カラムのデータ型によって異なります。DropDownListに異なるアイテムを表示するには、DropDownListのDataSourceプロパティにデータ連結タグを記述します。データ連結タグからは、関数を呼び出してアイテムをバインドします。
<asp:DropDownList
id="dropID" runat="server"
DataSource=<%# GetLogicalOperator("int") %> />
<asp:DropDownList
id="dropKen" runat="server"
DataSource=<%# GetLogicalOperator("string") %> />
¶ポイント3 ページ間でデータを渡すには
このサンプルでは、子ウィンドウから選択した検索条件を親ウィンドウに渡すのに、TextBoxを経由しています。子ウィンドウから選択した検索条件を親ウィンドウのTextBoxに渡すには、JavaScriptで記述したコードをブラウザから実行させます。親ウィンドウのTextBoxが書き換えられると、WebページがポストバックされてDataGridに検索結果が表示されます。
TextBoxが書き換えられたときにWebページをポストバックさせるには、TextBoxにクライアント側で動作するonPropertyChangeイベントを登録します。このイベントでは、Page.GetPostBackEventReference()メソッドが生成したJavaScriptを実行させてWebページをポストバックします。
◆メインプログラムDataGridFiltering.aspxの解説(HTML編)
DataGridFiltering.aspxのプレゼンテーションコンテンツの部分について解説します。行150-156のImageButtonでは、検索ボタンを定義しています。行157-163のLabelとTextBoxでは、件数を表示しています。
![]()
図 検索ボタンと件数を表示した例
行176-229では、DataGridを定義しています。このDataGridには、AutoGenerateColumnsプロパティにFalseを設定してカラムの自動生成機能を抑止しています。行190-228の<Columns>…</Columns>では、TemplateColumnとBoundColumnを定義しています。行191-202のTemplateColumnでは、ItemTemplateに<a>タグとLinkButtonを定義しています。<a>は、ブックマークとして使用します。LinkButtonは、レコードセレクターとして使用します。
行203-207のBoundColumnでは、得意先テーブルの得意先IDをバインドしています。後続するBoundColumnでは、得意先テーブルの得意先名、担当者名、役職、電話番号、都道府県をバインドしています。

図 DataGridに得意先テーブルを表示した例
行238-243では、メッセージを表示するTextBoxを定義しています。このTextBoxのReadOnlyプロパティには、Trueを設定して読み込み専用にしています。
行248-251では、Buttonを定義しています。このButtonのVisibleプロパティには、Falseを設定して非可視状態にしています。このButtonには、OnClickイベントが登録されています。OnClickイベントは、子ウィンドウから親ウィンドウをポストバックさせたときに実行されます。
リスト DataGridFiltering.aspxのソースコード(HTML編)
|
131:
<html> 178:
OnItemCommand="dgrdCustomers_ItemCommand" 204:
DataField="CustomerID" 228: </Columns> |
◆メインプログラムDataGridFiltering.aspxの解説(コード編)
DataGridFiltering.aspxは、子ウィンドウから検索条件を取得してDataGridに検索結果を表示します。子ウィンドウから選択した検索条件は、TextBoxを経由して親ウィンドウに渡します
Sub Page_Load()イベントの処理
このイベントは、DataGridFiltering.aspxがロードされたときに実行されます。このイベントでは、クライアント側で動作するイベントの登録と、DataGridに得意先テーブルをバインドします。
行9では、メッセージを表示するTextBoxにクライアント側で動作する、onPropertyChangeイベントを登録しています。onPropertyChangeイベントでは、Webページをポストバックします。GetPostBackEventReference()メソッドは、WebページをポストバックするJavaScriptを生成します。Webページがポストバックされると、btnRefreshイベントが実行されます。
行10-12のIf…End Ifでは、ページが最初にロードされたか調べています。ページが最初にロードされたときは、BindDataGrid()を呼び出してDataGridに得意先テーブルをバインドします。
|
8: Sub Page_Load() |
Sub dgrdCustomers_ItemDataBound()イベントの処理
このイベントは、DataGridのDataBind()メソッドが実行されたときに発生します。このイベントでは、DataGridのアイテム(DataGridItem)にクライアント側で動作するonClickイベントを登録します。これにより、DataGridの任意のセルをクリックして行を選択できるようになります
|
47: Sub
dgrdCustomers_ItemDataBound(s As Object, e As DataGridItemEventArgs) |
Sub dgrdCustomers_ItemCommand()イベントの処理
このイベントは、DataGridから行を選択したときに発生します。このイベントでは、InsertBookmarkScript()を呼び出してクライアント側で動作するJavaScriptを登録します。InsertBookmarkScriptの引数には、DataGridから選択したアイテムのインデックス番号を指定します。
|
59: Sub
dgrdCustomers_ItemCommand(s As Object, e As DataGridCommandEventArgs) |
Sub ibtnSearch_Command()イベントの処理
このイベントは、Webページから検索ボタンをクリックしたときに発生します。このイベントでは、InsertScriptBlock()を呼び出して、子ウィンドウを開きます。
|
65: Sub ibtnSearch_Command(s
As Object, e As CommandEventArgs) |
Sub btnRefresh_Click()イベントの処理
このイベントは、クライアント側からメッセージを表示するTextBoxを書き換えたときに発生します。このサンプルでは、子ウィンドウから親ウィンドウのTextBoxにメッセージを設定して書き換えます。つまり、子ウィンドウから親ウィンドウをポストバックさせています。btnRefresh_Clickイベントでは、DataGridに検索結果を表示します。
行17では、TextBoxに格納されている検索条件を取得しています。行19-26では、検索条件の有無を調べています。検索条件がないときは、SELECTステートメントにWHERE句を追加しません。
SELECT * From Customers
検索条件があるときは、SELECTステートメントにWHERE句を追加します。
SELECT * From Customers Where Criteria
行22-24のIf…EndIfでは、検索条件にティルダ(~)が含まれているか調べています。ティルダが含まれているときは、ティルダを引用符に置換します。
行29では、CreateDataSet()関数を呼び出して得意先テーブルのDataSetを作成します。CreateDataSetの引数には、SQLのSELECTステートメントを指定します。
行34-39のWith…End Withでは、DataGridに得意先テーブルのDataViewをバインドしています。
行40では、TextBoxに得意先テーブルのレコード件数を設定しています。レコード件数は、DataTableのRo
|
15: Sub
btnRefresh_Click(s As Object, e As EventArgs) |
Sub BindDataGrid()の処理
このサブプロシージャでは、DataGridに得意先テーブルをバインドして表示します。BindDataGridは、Page_Loadイベントから呼ばれます。
|
69: Sub BindDataGrid() |
Sub InsertScriptBlock()の処理
このサブプロシージャでは、子ウィンドウを開くJavaScriptを生成して登録します。InsertScriptBlockは、検索ボタンをクリックしたときに、ボタンのOnCommandイベントから呼ばれます。
行82-84では、JavaScriptのwindow.open()メソッドの引数に指定するオプションを生成しています。行86-90のWith…End Withでは、StringBuilderのAppend()メソッドで以下のJavaScriptを生成しています。
<script
language='javascript'>
window.open('PopupSearch.aspx','_blank','features');
</script>
JavaScriptのwindow.open()メソッドは、新規ウィンドウを開きます。Open()メソッドの引数には、url、target、featuresを指定します。urlには、新規ウィンドウに表示するファイルPopupSearch.aspxを指定します。
行91では、Page.RegisterClientScriptBlock()メソッドでJavaScriptを登録します。ここで登録したJavaScriptは、Webページがロードされたときにクライアント側のブラウザから実行されます。
|
81: Sub
InsertScriptBlock() |
Sub InsertBookmarkScript()の処理
このサブプロシージャでは、DataGridから選択した行が自動的に画面に表示されるように位置情報を保持します。DataGridがページ内に収まらないときは、ウィンドウに垂直型のスクロールバーが表示されてスクロールできるようになっています。DataGridをスクロールした状態で、Webページがポストバックされるとカレントの位置情報が失われて常に先頭行から表示されます。このサブプロシージャでは、ブックマーク機能を応用してWebページがポストバックされたときの位置を自動的に保持します。
InsertBookmarkScriptは、DataGridのOnItemCommandイベントから呼ばれます。OnItemCommandイベントは、DataGridから行を選択したときに発生します。
行96-100のWith…End Withでは、StringBuilderのAppend()メソッドで、以下のようなJavaScriptを生成しています。
<script
language='javascript'>
location.href='#999';
</script>
JavaScriptのlocation.href=では、hrefにブックマークID(#999)を設定してその位置に移動させます。このサンプルでは、DataGridの選択行のブックマークIDを設定して、その行に移動させます。つまり、選択した行が画面に表示されるようにしています。
行101では、Page.RegisterStartupScript()メソッドでJavaScriptを登録しています。RegisterStartupScriptで登録されたJavaScriptは、Webページの最後に挿入されます。ここで登録したJavaScriptは、Webページがロードされたときにクライアント側のブラウザから実行されます。
|
94: Sub
InsertBookmarkScript(intBookMarkID As Integer) |
Function GetBookMarkID()関数の処理
この関数は、ブックマークのIDを生成して返します。GetBookMarkIDは、DataGridのTemplateColumnがバインドされるときに呼ばれます。
191: <asp:TemplateColumn>
193:
<ItemTemplate>
194:
<a name='#<%#
GetBookMarkID() %>'></a>
199:
</ItemTemplate>
202: </asp:TemplateColumn>
GetBookMarkIDは、0から始まるブックマークIDを生成して返します。
|
104:
Function GetBookMarkID() As String |
Function CreateDataSet()関数の処理
この関数は、データベースからレコードを抽出してDataSetを作成して返します。CreateDataSetは、BindDataGrid()とbtnRefresh_Click()から呼ばれます。CreateDataSetのの引数には、strSQLとstrConnectionStringを指定します。strSQLには、データベースからレコードを抽出するSELECTステートメントを指定します。strConnectionStringには、Web.Configに登録されている<add>タグのkeyを指定します。strConnectionStringを省略したときは、デフォルトとしてconStringAccNwを使用します。
<add
key="conStringAccNw"
value="PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA
Source=C:\WebMatrix\webdb\Nwind.mdb" />
|
119:
Function CreateDataSet(strSQL As String, _ |
リスト DataGridFiltering.aspxのソースコード(コード編)
|
1: <%@ Page
language="vb" SmartNavigation="false" %> 127:
End Function |
◆サブプログラムPopupSearch.aspxの解説(HTML編)
子ウィンドウのWebフォームには、得意先ID、得意先名、役職、都道府県のDropDownListとTextBoxを作成しています。DropDownListからBetween、Not Betweenの条件式を選択したときは、範囲(開始値/終了値)を入力する2個のTextBoxを表示します。DroDownListからその他の条件式を選択したときは、1個のTextBoxを表示します。TextBoxを1個と2個のケースに切り替えるには、Panelを使用しています。
行294-317では、得意先IDのLabel、DropDownList、TextBoxを定義しています。TextBoxは、Panel内に1個のケースと2個のケースを定義しています。行294では、Labelで「ID」を表示します。行297-301では、DropDownListに条件式を表示します。行298では、DropDownListのAutoPostBackプロパティにTrueを設定してアイテムを選択したときにWebページをポストバックさせています。行299では、OnSelectedIndexChangedイベントを登録しています。このイベントは、DropDownListからアイテムを選択したときに発生します。行301では、DataSourceプロパティにデータ連結式を記述しています。GetLogicalOperator()関数の引数には、int/stringを指定します。intは、得意先テーブルのカラムが数値型のときに指定します。stringは、得意先テーブルのカラムが文字型のときに指定します。DropDownListには、得意先テーブルのデータ型によって異なる条件式を表示します。
294: <asp:Label runat="server"
Text="ID" CssClass="label" />
297: <asp:DropDownList id="dropID"
runat="server"
298:
AutoPostBack="True"
299:
OnSelectedIndexChanged="dropID_SelectedIndexChanged"
301: DataSource=<%# GetLogicalOperator("int") %> />
行305-310では、Panelに1個のTextBoxを定義しています。このTextBoxは、DropDownListからBetween/Not Between以外の条件式を選択したときに表示します。行311-317では、Panelに2個のTextBoxを定義しています。2個のTextBoxは、DropDownListからBetween/Not Betweenの条件式を選択したときに表示します。
305: <asp:Panel id="pnlSingleID"
runat="server" Visible="True">
307:
<asp:TextBox id="txtID" runat="server"
308:
Columns="30" />
310: </asp:Panel>
311: <asp:Panel
id="pnlMultiID" runat="server"
Visible="False">
313:
<asp:TextBox id="txtFromID" runat="server"
Columns="10" />
314:
<asp:Label
id="lblID" runat="server" Text="and"
CssClass="label" />
315:
<asp:TextBox
id="txtToID" runat="server" Columns="10" />
317: </asp:Panel>
以下、得意先名、役職、都道府県のLabel、DropDownList、TextBoxを定義しています。

図 条件式により表示されるTextBoxの個数が異なる例
行418-420では、「クリア」のButtonを定義しています。このButtonは、検索条件をリセットするときに使用します。行421-424では、論理演算子(OR/AND条件)を選択するDropDownListを定義しています。
421: <asp:DropDownList id="dropCriteria"
runat="server">
422: <asp:ListItem
Value="or" Text="いずれかの検索条件に一致 (OR条件)" />
423: <asp:ListItem Value="and"
Text="すべての検索条件に一致 (AND条件)" />
424: </asp:DropDownList>
行425-429では、「検索」と「閉じる」のButtonを定義しています。検索ボタンをクリックしたときは、検索条件を親ウィンドウに渡してDataGridに検索結果を表示します。閉じるボタンをクリックしたときは、子ウィンドウを閉じます。
![]()
図 ボタンとドロップダウンリストを表示した例
リスト PopupSearch.aspxのソースコード(HTML編)
|
276:
<html> 418: <asp:Button id="btnClear"
runat="server" |
◆サブプログラムPopupSearch.aspxの解説(コード編)
PopupSearch.aspxは、Webフォームから選択した検索条件を親ウィンドウに渡します。検索条件は、得意先テーブルの得意先ID、得意先名、役職、都道府県のカラムに対して設定することができます。複数のカラムの検索条件を設定するときは、論理演算子(OR/AND条件)を適用することができます。
Sub Page_Load()イベントの処理
このイベントは、ページがロードされたときに発生します。このイベントでは、ページの初期化を行います。
行5-8のIf…End Ifでは、ページが最初にロードされたか調べています。最初にロードされたときは、「閉じる」ボタンにクライアント側で動作するonClickイベントを登録します。onClickイベントでは、JavaScriptのwindow.close()メソッドを実行して子ウィンドウを閉じます。行7のPage.DataBind()メソッドでは、DropDownListのDataSourceプロパティに設定されているGetLogicalOperator()関数を実行させて条件式をバインドします。
297: <asp:DropDownList id="dropID"
runat="server"
301: DataSource=<%# GetLogicalOperator("int") %> />
|
4: Sub Page_Load() |
Sub dropID_SelectedIndexChanged()イベントの処理
このイベントは、得意先IDのDropDownListから条件式を選択したときに発生します。このイベントでは、PanelのVisibleプロパティを書き換えて、表示するTextBoxの個数を切り替えます。DropDownListからBetween/Not Betweenを選択したときは、2個のTextBoxが定義されているPanelを可視状態にします。DropDownListからBetween/Not Between以外を選択したときは、1個のTextBoxが定義されているPanelを可視状態にします。
行12では、DropDownListのSelectedItem.Textプロパティから、選択した条件式を取得しています。行14-20のIf…Else…End Ifでは、PanelのVisibleプロパティを書き換えて可視/非可視状態に切り替えます。DropDownListからBetween以外を選択したときは、1個のTextBoxが定義されているPanelを可視状態にします。DropDownListからBetweenを選択したときは、2個のTextBoxが定義されているPanelを可視状態にします。
|
11: Sub
dropID_SelectedIndexChanged(s As Object, e As EventArgs) |
Sub dropCompanyName_SelectedIndexChanged()イベントの処理
このイベントは、得意先名のDropDownListから条件式を選択したときに発生します。このイベントでは、PanelのVisibleプロパティを書き換えて表示するTextBoxの個数を切り替えます。
|
23: Sub
dropCompanyName_SelectedIndexChanged(s As Object, e As EventArgs) |
Sub dropContactTitle_SelectedIndexChanged()イベントの処理
このイベントは、役職のDropDownListから条件式を選択したときに発生します。このイベントでは、PanelのVisibleプロパティを書き換えて表示するTextBoxの個数を切り替えます。
|
35: Sub
dropContactTitle_SelectedIndexChanged(s As Object, e As EventArgs) |
Sub dropKen_SelectedIndexChanged()イベントの処理
このイベントは、都道府県のDropDownListから条件式を選択したときに発生します。このイベントでは、PanelのVisibleプロパティを書き換えて表示するTextBoxの個数を切り替えます。
|
47: Sub
dropKen_SelectedIndexChanged(s As Object, e As EventArgs) |
Sub btnClear_Click()イベントの処理
このイベントは、Webフォームから「クリア」ボタンをクリックしたときに発生します。このイベントでは、検索条件をリセットします。
|
59: Sub btnClear_Click(s
As Object, e As EventArgs) 78: pnlSingleID.Visible = True 86: End Sub |
Sub btnSearch_Click()イベントの処理
このイベントは、Webフォームから「検索」ボタンをクリックしたときに発生します。このイベントでは、Webフォームから選択した検索条件を取得して親ウィンドウに渡します。
行90では、論理演算子(OR/AND条件)のDropDownListから選択した値(and/or)を取得しています。行93-103では、得意先IDの検索条件を取得しています。行93では、DropDownListから条件式を取得しています。DropDownListのSelectedItem.Textプロパティには、Equal to、Less than、Greater than、Between・・・などの比較演算子が格納されています。行94-103のIf…End Ifでは、DropDownListから比較演算子を選択したか調べています。行95-97では、StringBuilderのAppend()メソッドで論理演算子(Or/And)を追加しています。
(CustomerID Between 30 and 39) Or (Ken In '埼玉県')
(CustomerID Between 30 and 39) And (Ken In '埼玉県')
行98-102では、条件式の比較演算子にBetweenが含まれるか調べています。Betweenが含まれるときは、GenIntCriteria()関数の引数に開始値/終了値を指定して呼び出します。Betweenが含まれないときは、GetIntCriteria()関数の引数に値を指定して呼び出します。GetIntCriteria()からは、SQLのWHERE句が返されます。
Equal to è CustomerID=1
Not Equal to è Not CustomerID=1
Between è CustomerID Between 1 and 5
同様の手順で、得意先名、役職、都道府県の検索条件を取得します。なお、これらのカラムのWHERE句を生成するときは、GetStrCriteria()関数を使用します。
行142-147のWith…End Withでは、StringBuilderのAppend()メソッドで以下のJavaScriptを生成しています。
<script language='javascript'>
window.opener.frmMain.txtMessage.value = 'Search Criteria';
</script>
JavaScriptのwindow.opener.frmMain.txtMessage.value=では、親ウィンドウのTextBoxに検索条件(Search Criteria)を設定しています。ここで設定した検索条件は、親ウィンドウのDataGridに検索結果を表示するときに使用します。
行148では、Page.RegisterClientScriptBlock()メソッドでJavaScriptを登録しています。ここで登録したJavaScriptは、Webページがロードされたときにクライアント側のブラウザがら実行されます。
|
88: Sub btnSearch_Click(s
As Object, e As EventArgs) 141: Dim sbScript As New
StringBuilder() |
Function GenIntCriteria()関数の処理
この関数は、SQLのWHERE句を生成して返します。この関数は、検索ボタンをクリックしたときにbtnSearch_Click()イベントから呼ばれます。GenIntCriteria()は、数値型のカラムのWHERE句を生成するときに使用します。
行161-186のIf…ElseIf…End Ifでは、比較演算子を調べて以下のようなWHERE句を生成します。
|
Equal
to è CustomerID=999 |
Not
Equal to è Not CustomerID=999 |
|
Less
than è CustomerID<999 |
Not
Less than è Not CustomerID<999 |
|
Greater
than è CustomerID>999 |
Not
Greater than è Not CustomerID>999 |
|
Between
è CustomerID Between 1 and
2 |
Not
Between è CustomerID Not Between 1
and 2 |
|
In
è CustomerID In(1,2) |
Not
In è CustomerID Not In(1,2) |
|
Is
Null è CustomerID Is Null |
Is
Not Null è CustomerID Is Not Null |
行187では、SQLのWHERE句を返します。
|
151:
Function GenIntCriteria(strFieldName As String, strOp As String, _ 169: ElseIf strOp = "In"
Then 176: ElseIf strOp = "Not Less
than" Then |
Function GenStrCriteria()関数の処理
この関数は、SQLのWHERE句を生成して返します。この関数は、検索ボタンをクリックしたときにbtnSearch_Click()イベントから呼ばれます。GenStrCriteria()は、文字型のカラムのWHERE句を生成するときに使用します。
行200-221のIf…ElseIf…End Ifでは、比較演算子を調べて以下のようなWHERE句を生成します。
|
Like
è Ken=~県名~ |
Not
Equal to è Not Ken=~県名~ |
|
Equal
to è Ken=~県名~ |
Not
Less than è Not Ken<~県名~ |
|
Between
è Ken Between ~県名1~ and ~県名2~ |
Not
Betweenè Ken Not Between ~県名1~ and ~県名2~ |
|
In
è Ken In(~県名1~,~県名2~) |
Not
In è Ken Not In(~県名1~,~県名2~) |
|
Is
Null è Ken Is Null |
Is
Not Null è Ken Is Not Null |
文字型のWHERE句を生成するときは、値を引用符(シングルクオテーション、ダブルクオテーション)で囲む必要があります。このサンプルでは、WHERE句を子ウィンドウから親ウィンドウに渡すときにJavaScriptを使用します。JavaScriptでWHERE句を渡すときに引用符が含まれるとエラーになるため、引用符をティルダ(~)で代用します。親ウィンドウでSQLのWHERE句を生成するときに、ティルダを引用符に置換します。
Ken
= ~埼玉県~ è Ken = '埼玉県'
行222では、SQLのWHERE句を返します。
|
190:
Function GenStrCriteria(strFieldName As String, strOp As String, _ 211: ElseIf strOp = "Not
Like" Then 217: ElseIf strOp = "Not
In" Then 219: ElseIf strOp = "Is Not
Null" Then |
Function SplitValue()関数の処理
この関数は、コンマ区切りの文字列を分割してティルダで囲って返します。この関数は、GenStrCriteria()から比較演算子In()の値を取得するときに呼ばれます。
行226では、コンマ区切りの文字列を分割して配列変数に格納します。行230-235のFor…Nextでは、分割された文字列にティルダを付加して囲みます。行236では、分割した文字列を結合して返します。
埼玉県,千葉県 è ~埼玉県~,~千葉県~
|
225:
Function SplitValue(strValue As String) As String |
Function GetLogicalOperator()関数の処理
この関数は、検索条件の比較演算子をArrayListに格納して返します。この関数は、DropDownListのDataSourceプロパティにデータ連結式として記述されています。GetLogicalOperator()は、Page.DataBind()メソッドが実行されたときに呼ばれます。
この関数からは、数値型と文字型の2種類のArrayListを返します。行244-256では、ArrayListのAdd()メソッドで数値型のアイテムを追加しています。Add()メソッドの引数には、ListItemを指定します。ListItemの引数には、Text/Valueプロパティを指定します。このサンプルでは、Textプロパティに比較演算子、Valueプロパティに比較演算子の省略形を指定しています。
行258-268では、ArrayListに文字型のアイテムを追加しています。行271では、ArrayListを返しています。
|
239:
Function GetLogicalOperator(strDataType As String) As ArrayList |
リスト PopupSearch.aspxのソースコード(コード編)
|
1: <%@ Page
language="vb" SmartNavigation="False" %> |
Tip
|
引用符が含まれるデータを渡すには このサンプルでは、引用符が含まれるデータをJavaScriptで渡すときに引用符をティルダに置換してエラーとなるのを回避しています。JavaScriptで引用符を渡すには、「\'」のように記述するとエラーを回避することができます。 データの内容が不明なときは、Session変数にデータを格納して渡すとエラーを回避することができます。 |