|
|
解説
実例で学ぶASP.NETプログラミング
第11回 ASP.NETで進化する「検索画面」の構築
小田原 貴樹(うりゅう)
2004/03/20 |
|
|
これで「お酒の種類」RadioButtonListコントロールに表示されている各項目のうち、指定されたフィルタ条件に一致しない項目を削除するための関数は完成した。この関数を実行すると、選択された項目と組み合わせた際に一致しない項目は削除されるころになる。ほかの4つの関数(NOMICHメソッド/AMACHメソッド/KAKAKUCHメソッド/SIZECHメソッド)も内容はほとんど同じなので、以下を参照してほしい。
1: Public Sub NOMICH(ByVal PVIEW As DataView, ByVal RL As RadioButtonList, ByVal BFIL As String)
2: Dim I As Integer
3: Dim DELI() As Integer
4: Dim X As Integer = 0
5: For I = 0 To RL.Items.Count - 1
6: PVIEW.RowFilter = BFIL & " AND " & RL.Items(I).Value & " = TRUE"
7: If PVIEW.Count = 0 Then
8: ReDim Preserve DELI(X)
9: DELI(X) = I
10: X += 1
11: End If
12: PVIEW.RowFilter = BFIL
13: Next
14: If Not DELI Is Nothing Then
15: Dim L As Integer = 0
16: For I = 0 To DELI.GetUpperBound(0)
17: RL.Items.RemoveAt(DELI(I) - L)
18: L += 1
19: Next
20: End If
21: End Sub
|
|
「飲み方」RadioButtonListコントロールでフィルタ条件に一致しない項目を削除する関数(NOMICHメソッド) |
「飲み方」のRadioButtonListコントロールに表示されている各項目のうち、指定されたフィルタ条件に一致しない項目を削除するための関数。
1: Public Sub AMACH(ByVal PVIEW As DataView, ByVal RL As RadioButtonList, ByVal BFIL As String)
2: Dim I As Integer
3: Dim DELI() As Integer
4: Dim X As Integer = 0
5: For I = 0 To RL.Items.Count - 1
6: PVIEW.RowFilter = BFIL & " AND 甘辛 = " & RL.Items(I).Value
7: If PVIEW.Count = 0 Then
8: ReDim Preserve DELI(X)
9: DELI(X) = I
10: X += 1
11: End If
12: PVIEW.RowFilter = BFIL
13: Next
14: If Not DELI Is Nothing Then
15: Dim L As Integer = 0
16: For I = 0 To DELI.GetUpperBound(0)
17: RL.Items.RemoveAt(DELI(I) - L)
18: L += 1
19: Next
20: End If
21: End Sub
|
|
「甘辛」RadioButtonListコントロールでフィルタ条件に一致しない項目を削除する関数(AMACHメソッド) |
「甘辛」のRadioButtonListコントロールに表示されている各項目のうち、指定されたフィルタ条件に一致しない項目を削除するための関数。
1: Public Sub KAKAKUCH(ByVal PVIEW As DataView, ByVal RL As RadioButtonList, ByVal BFIL As String)
2: Dim I As Integer
3: Dim DELI() As Integer
4: Dim X As Integer = 0
5: For I = 0 To RL.Items.Count - 1
6: PVIEW.RowFilter = BFIL & " AND " & RL.Items(I).Value
7: If PVIEW.Count = 0 Then
8: ReDim Preserve DELI(X)
9: DELI(X) = I
10: X += 1
11: End If
12: PVIEW.RowFilter = BFIL
13: Next
14: If Not DELI Is Nothing Then
15: Dim L As Integer = 0
16: For I = 0 To DELI.GetUpperBound(0)
17: RL.Items.RemoveAt(DELI(I) - L)
18: L += 1
19: Next
20: End If
21: End Sub
|
|
「価格帯」RadioButtonListコントロールでフィルタ条件に一致しない項目を削除する関数(KAKAKUCHメソッド) |
「価格帯」のRadioButtonListコントロールに表示されている各項目のうち、指定されたフィルタ条件に一致しない項目を削除するための関数。
1: Public Sub SIZECH(ByVal PVIEW As DataView, ByVal RL As RadioButtonList, ByVal BFIL As String)
2: Dim I As Integer
3: Dim DELI() As Integer
4: Dim X As Integer = 0
5: For I = 0 To RL.Items.Count - 1
6: PVIEW.RowFilter = BFIL & " AND " & RL.Items(I).Value
7: If PVIEW.Count = 0 Then
8: ReDim Preserve DELI(X)
9: DELI(X) = I
10: X += 1
11: End If
12: PVIEW.RowFilter = BFIL
13: Next
14: If Not DELI Is Nothing Then
15: Dim L As Integer = 0
16: For I = 0 To DELI.GetUpperBound(0)
17: RL.Items.RemoveAt(DELI(I) - L)
18: L += 1
19: Next
20: End If
21: End Sub
|
|
「容量」RadioButtonListコントロールでフィルタ条件に一致しない項目を削除する関数(SIZECHメソッド) |
「容量」のRadioButtonListコントロールに表示されている各項目のうち、指定されたフィルタ条件に一致しない項目を削除するための関数。
さて、これで各項目を選択した際に実行されなければならない処理はすべて実装した。後は各RadioButtonListコントロールのSelectedIndexChangedイベントのハンドラ・メソッドを実装していくだけだ。ほかの4つのハンドラ・メソッドも以下に示すようにほとんど同じ内容である。
1: Private Sub NOMI_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NOMI.SelectedIndexChanged
2: Dim OVALUE As Object = NOMI.SelectedItem.Value
3: Dim OTEXT As Object = NOMI.SelectedItem.Text
4: OWNCLR(NOMI, OVALUE, OTEXT)
5: Session("SX(2)") = 1
6: Session("PVIEW").RowFilter = Session("BFIL") & OVALUE & " = TRUE"
7: NCNT.Text = Session("PVIEW").Count
8: Session("BFIL") = Session("PVIEW").RowFilter
9: If Session("SX(1)") = 0 Then SAKECH(Session("PVIEW"), SAKE, Session("BFIL"))
10: If Session("SX(3)") = 0 Then AMACH(Session("PVIEW"), AMA, Session("BFIL"))
11: If Session("SX(4)") = 0 Then KAKAKUCH(Session("PVIEW"), KAKAKU, Session("BFIL"))
12: If Session("SX(5)") = 0 Then SIZECH(Session("PVIEW"), SIZE, Session("BFIL"))
13:
14: Session("BFIL") = Session("BFIL") & " AND "
15: End Sub
|
|
「飲み方」RadioButtonListコントロールの項目が選択された場合のイベント処理コード |
1: Private Sub AMA_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AMA.SelectedIndexChanged
2: Dim OVALUE As Object = AMA.SelectedItem.Value
3: Dim OTEXT As Object = AMA.SelectedItem.Text
4: OWNCLR(AMA, OVALUE, OTEXT)
5: Session("SX(3)") = 1
6: Session("PVIEW").RowFilter = Session("BFIL") & "甘辛 = " & OVALUE
7: NCNT.Text = Session("PVIEW").Count
8: Session("BFIL") = Session("PVIEW").RowFilter
9: If Session("SX(1)") = 0 Then SAKECH(Session("PVIEW"), SAKE, Session("BFIL"))
10: If Session("SX(2)") = 0 Then NOMICH(Session("PVIEW"), NOMI, Session("BFIL"))
11: If Session("SX(4)") = 0 Then KAKAKUCH(Session("PVIEW"), KAKAKU, Session("BFIL"))
12: If Session("SX(5)") = 0 Then SIZECH(Session("PVIEW"), SIZE, Session("BFIL"))
13:
14: Session("BFIL") = Session("BFIL") & " AND "
15: End Sub
|
|
「甘辛」RadioButtonListコントロールの項目が選択された場合のイベント処理コード |
1: Private Sub KAKAKU_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KAKAKU.SelectedIndexChanged
2: Dim OVALUE As Object = KAKAKU.SelectedItem.Value
3: Dim OTEXT As Object = KAKAKU.SelectedItem.Text
4: OWNCLR(KAKAKU, OVALUE, OTEXT)
5: Session("SX(4)") = 1
6: Session("PVIEW").RowFilter = Session("BFIL") & OVALUE
7: NCNT.Text = Session("PVIEW").Count
8: Session("BFIL") = Session("PVIEW").RowFilter
9: If Session("SX(1)") = 0 Then SAKECH(Session("PVIEW"), SAKE, Session("BFIL"))
10: If Session("SX(2)") = 0 Then NOMICH(Session("PVIEW"), NOMI, Session("BFIL"))
11: If Session("SX(3)") = 0 Then AMACH(Session("PVIEW"), AMA, Session("BFIL"))
12: If Session("SX(5)") = 0 Then SIZECH(Session("PVIEW"), SIZE, Session("BFIL"))
13:
14: Session("BFIL") = Session("BFIL") & " AND "
15: End Sub
|
|
「価格帯」RadioButtonListコントロールの項目が選択された場合のイベント処理コード |
1: Private Sub SIZE_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SIZE.SelectedIndexChanged
2: Dim OVALUE As Object = SIZE.SelectedItem.Value
3: Dim OTEXT As Object = SIZE.SelectedItem.Text
4: OWNCLR(SIZE, OVALUE, OTEXT)
5: Session("SX(5)") = 1
6:
7: Session("PVIEW").RowFilter = Session("BFIL") & OVALUE
8: NCNT.Text = Session("PVIEW").Count
9: Session("BFIL") = Session("PVIEW").RowFilter
10: If Session("SX(1)") = 0 Then SAKECH(Session("PVIEW"), SAKE, Session("BFIL"))
11: If Session("SX(2)") = 0 Then NOMICH(Session("PVIEW"), NOMI, Session("BFIL"))
12: If Session("SX(3)") = 0 Then AMACH(Session("PVIEW"), AMA, Session("BFIL"))
13: If Session("SX(4)") = 0 Then KAKAKUCH(Session("PVIEW"), KAKAKU, Session("BFIL"))
14:
15: Session("BFIL") = Session("BFIL") & " AND "
16: End Sub
|
|
「容量」RadioButtonListコントロールの項目が選択された場合のイベント処理コード |
似たようなコードが並んでいるが、異なるのはほかの4つのRadioButtonListコントロールの指定の部分と、RowFilterプロパティに対する記述の仕方だ。検索画面上では各RadioButtonListコントロールは同様に表現されているが、商品情報データ内での格納され方は異なるため、WHERE条件文の記述の仕方で吸収している。コードを参照する際には、特にRowFilterプロパティの指定部分を注意して確認してほしい。ここまでの作業で一連の検索の流れは完成した。続いては「選択の解除」ボタンが押された際の処理を作成しよう。
ユーザーが選択を解除した際のイベント処理を実装する
今回作成している検索画面では、項目を選択していくごとに各RadioButtonListコントロールが無効化されていくので、ユーザーが検索をやり直したくなった場合のために、選択の解除ボタンが必要になる。この解除ボタンが押された際のイベント処理を実装しよう。以下のコードを参照してほしい。
1: Private Sub CLB_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles CLB.Click
2: Dim PSET As New PVSET
3: Dim PVIEW As New DataView
4: DC.FDPV(PSET)
5: PVIEW.Table = PSET.Tables("酒完成表")
6: Session("PVIEW") = PVIEW
7: ACNT.Text = Session("PVIEW").Count
8: NCNT.Text = Session("PVIEW").Count
9: SAKEIN(SAKE)
10: NOMIIN(NOMI)
11: AMAIN(AMA)
12: KAKAKUIN(KAKAKU)
13: SIZEIN(SIZE)
14:
15: Session("BFIL") = ""
16: Dim I As Integer
17: For I = 1 To 5
18: Session("SX(" & I & ")") = 0
19: Next
20: End Sub
|
|
解除ボタンがクリックされたときにページを初期状態に戻すコード |
上のコードは一目瞭然だ。Page_Loadイベントで実装したコードとほとんど変わらない。解除ボタンが押された際にはページが開かれた状態に戻しているだけだ。これで、ボタンを押せば繰り返し検索が行えるようになった。
Insider.NET 記事ランキング
本日
月間