データの抽出とリスト化の処理
メーカー名をリストから選ぶと、これを抽出条件にクエリを実行し、型番(モデルNo)と在庫数を、残りのLiveListBoxコントロールのリストにそれぞれ組み込みます。
この処理は、最初のLiveListBoxコントロール「LiveListBox1」のイベントハンドラで行います。ユーザーがリストを選択すると、LiveListBoxコントロールには「SelectedIndexChanged」イベントが発生しますので、このイベントハンドラでクエリを実行する処理と、結果セットをリスト化する処理を実行します。
クエリ実行コードの作成
クエリの実行には、コードからOleDbConnection、OleDbDataAdapter、DataSetの各オブジェクトを作成して使用します。
まず、Accessデータベース「ギター弦在庫表.mdb」に接続するために、OleDbConnectionオブジェクトを作成します。
Protected Sub LiveListBox1_SelectedIndexChanged(ByVal sender _ As Object, ByVal e As System.EventArgs) _ Handles LiveListBox1.SelectedIndexChanged 'データベースに接続 Dim connection As New Data.OleDb.OleDbConnection( _ "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + _ Server.MapPath("App_Data/ギター弦在庫表.mdb"))
protected void LiveListBox1_SelectedIndexChanged(object sender, EventArgs e) { //データベースに接続 System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection( "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("App_Data/ギター弦在庫表.mdb"));
次に、最初のLiveListBoxコントロール「LiveListBox1」で選択されているメーカー名を取得します。これは、SelectedItemクラスのTextプロパティを参照します。取得したメーカー名を使って、SQL文を作成します。抽出する列は「モデルNo」と「在庫数」です。
そして、作成したSQL文とデータベースに接続するOleDb.OleDbConnectionオブジェクトを使って、OleDbDataAdapterを作成します。
'メーカー名を取得 Dim makername As String = Me.LiveListBox1.SelectedItem.Text 'クエリを実行 Dim sql As String = "SELECT 在庫表.モデルNo, 在庫表.在庫数 " + "FROM 在庫表 WHERE 在庫表.メーカー名='" + makername + "';" Dim adapter As New Data.OleDb.OleDbDataAdapter(sql, connection)
//メーカー名を取得 String makername = LiveListBox1.SelectedItem.Text; //クエリを実行 String sql = "SELECT 在庫表.モデルNo, 在庫表.在庫数 " + "FROM 在庫表 WHERE 在庫表.メーカー名='" + makername + "';"; System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(sql, connection);
最後に、DataSetオブジェクトを作成し、Fillメソッドでクエリを実行して結果セットをDataSetオブジェクトに格納し、LiveMessageBoxコントロールでデータ件数を表示します。
Dim dataSet As New Data.DataSet() adapter.Fill(dataSet, "fill") Me.LiveMessageBox1.Show(dataSet.Tables(0).Rows.Count & _ "件のデータを取得しました。", _ Dart.PowerWEB.LiveControls.DialogType.Alert
DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "fill"); LiveMessageBox1.Show(dataSet.Tables[0].Rows.Count + "件のデータを取得しました。", Dart.PowerWEB.LiveControls.DialogType.Alert);
LiveMessageBoxコントロールは、Windowsフォームで使用しているMessageBoxと同じようなメッセージボックスをWebページでも使えるコントロールで、Showメソッドでメッセージボックスを表示します。引数は2つで、「表示する文字列」と「ボタンのタイプ」になります。ボタンのタイプはJavaScriptメッセージボックスが表現できる3タイプとなっており、DialogTypeパラメータで指定します。
ユーザーが メッセージボックスのボタンをクリックすると、LiveMessageBoxコントロールには「Response」イベントが発生します。ボタンが押された時の処理を組み込みたい場合は、このイベントハンドラを使用します。
今回のプログラムでは、特に処理は組み込みません。
クエリ結果のリスト化
クエリの結果セットから、それぞれ「モデルNo」と「在庫数」のデータを取り出し、残りのLiveListBoxコントロール「LiveListBox2」と「LiveListBox3」のリストに組み込みます。
リストに組み込む処理はとても簡単で、LiveListBoxクラスのDataSourceプロパティにDataSetオブジェクトを、DataMemberプロパティにDataSet内のDataTable名を指定します。
そして、DataTextFieldプロパティに、クエリの結果セット内にある設定したいデータの列名を指定します。ここでは、LiveListBox2に「モデルNo」を、LiveListBox3「在庫数」を指定します。
最後に、DataBindメソッドを実行して、LiveListBoxコントロールとDataSetオブジェクトを結合させます。
' データベースをLiveListBoxコントロールにバインド LiveListBox2.DataSource = dataSet LiveListBox2.DataMember = "fill" LiveListBox2.DataTextField = "モデルNo" LiveListBox2.DataBind() LiveListBox3.DataSource = dataSet LiveListBox3.DataMember = "fill" LiveListBox3.DataTextField = "在庫数" LiveListBox3.DataBind()
//データベースをLiveListBoxコントロールにバインド LiveListBox2.DataSource = dataSet; LiveListBox2.DataMember = "fill"; LiveListBox2.DataTextField = "モデルNo"; LiveListBox2.DataBind(); LiveListBox3.DataSource = dataSet; LiveListBox3.DataMember = "fill"; LiveListBox3.DataTextField = "在庫数"; LiveListBox3.DataBind();