SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(LiveControls)

Ajax対応リストボックスでAccessデータを表示するWebページを作る

LiveControls 1.0JのLiveListBoxコントロールを使ったWebページの作成

  • X ポスト
  • このエントリーをはてなブックマークに追加

データの抽出とリスト化の処理

 メーカー名をリストから選ぶと、これを抽出条件にクエリを実行し、型番(モデルNo)と在庫数を、残りのLiveListBoxコントロールのリストにそれぞれ組み込みます。

メーカー名をリストから選ぶと型番(モデルNo)と在庫数を残りのLiveListBoxコントロールのリストにそれぞれ組み込む
メーカー名をリストから選ぶと型番(モデルNo)と在庫数を残りのLiveListBoxコントロールのリストにそれぞれ組み込む

 この処理は、最初のLiveListBoxコントロール「LiveListBox1」のイベントハンドラで行います。ユーザーがリストを選択すると、LiveListBoxコントロールには「SelectedIndexChanged」イベントが発生しますので、このイベントハンドラでクエリを実行する処理と、結果セットをリスト化する処理を実行します。

クエリ実行コードの作成

 クエリの実行には、コードからOleDbConnection、OleDbDataAdapter、DataSetの各オブジェクトを作成して使用します。

 まず、Accessデータベース「ギター弦在庫表.mdb」に接続するために、OleDbConnectionオブジェクトを作成します。

Visual Basic
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"))
C#
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を作成します。

Visual Basic
'メーカー名を取得
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)
C#
//メーカー名を取得
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コントロールでデータ件数を表示します。

Visual Basic
Dim dataSet As New Data.DataSet()
adapter.Fill(dataSet, "fill")

Me.LiveMessageBox1.Show(dataSet.Tables(0).Rows.Count & _
                        "件のデータを取得しました。", _
                        Dart.PowerWEB.LiveControls.DialogType.Alert
C#
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オブジェクトを結合させます。

Visual Basic
' データベースをLiveListBoxコントロールにバインド
LiveListBox2.DataSource = dataSet
LiveListBox2.DataMember = "fill"
LiveListBox2.DataTextField = "モデルNo"
LiveListBox2.DataBind()

LiveListBox3.DataSource = dataSet
LiveListBox3.DataMember = "fill"
LiveListBox3.DataTextField = "在庫数"
LiveListBox3.DataBind()
C#
//データベースをLiveListBoxコントロールにバインド
LiveListBox2.DataSource = dataSet;
LiveListBox2.DataMember = "fill";
LiveListBox2.DataTextField = "モデルNo";
LiveListBox2.DataBind();

LiveListBox3.DataSource = dataSet;
LiveListBox3.DataMember = "fill";
LiveListBox3.DataTextField = "在庫数";
LiveListBox3.DataBind();

次のページ
2つのリストの選択の連動化

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
ComponentZine(LiveControls)連載記事一覧
この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2719 2009/03/17 12:08

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング