すぐ使えるADO.NET

【Visual BasicによるADO.NETデータベースプログラミング】

本の紹介

バックナンバー:VB.NETデータベースプログラミング

ADO.NETの基本的なプログラミングを中心に、すぐ使えるサンプルプログラム満載です。




【第7号】

 第7号(2004.5.31発行)
======================================================================
         ★★ VB.NETデータベースプログラミング奮闘記 ★★

----------------------------------------------------------------------
ADO.NETの基本的なプログラミングを中心に掲載します。
末永くご購読の程よろしくお願い申し上げます。

すぐ使えるADO.NETの研究 --> サンプルプログラム満載
                            http://park5.wakwak.com/‾weblab/
======================================================================
           ★★ VB.NETデータベースプログラミング奮闘記 ★★

----------------------------------------------------------------------
ADO.NETの基本的なプログラミングを中心に掲載します。
末永くご購読の程よろしくお願い申し上げます。

すぐ使えるADO.NETの研究 --> サンプルプログラム満載
                            http://park5.wakwak.com/‾weblab/
======================================================================
                        -----【目次】-----

1. VB.NETワンポイント:リストボックスにItems.Addで項目追加
2. ListBoxに表示した部門名から選択した部門名の部門コードを取得
3. VB.NETワンポイントオブジェクト指向:コントロールの動的生成
4. 次号予告

----------------------------------------------------------------------
  ■■ VB.NETワンポイント:リストボックスにItems.Addで項目追加 ■■

デザイン時に、Itemsプロパティを使って、項目を追加することができますが、
今回は、リストボックスのItems.Addメソッドを使って、元号名をリストボッ
クスに表示して、その中のひとつを選択できるようにします。

SelectionModeプロパティに、SelectionMode.Oneを設定すると、ひとつのみ
選択できるようになります。
SelectionMode.MultiExtendedを設定すると、Shiftキー・Ctrlキー・
方向キー・マウスクリックで、複数の項目を選択できます。
SelectionMode.MultiSimpleを設定すると、マウスクリック・Spaceキーで、
複数の項目を選択できます。

項目を選択すると、SelectedIndexプロパティが設定されます。先頭項目を選
択すると、0になり、以下順次1, 2, 3, ・・・となります。項目を選択してい
ないときは、-1になります。

  Private Sub Form1_Load(ByVal sender As System.Object, _
                ByVal e As System.EventArgs) Handles MyBase.Load

    'ひとつのみ選択可能
    Me.ListBox1.SelectionMode = SelectionMode.One

    '項目の追加
    Me.ListBox1.Items.Add("明治")
    Me.ListBox1.Items.Add("大正")
    Me.ListBox1.Items.Add("昭和")
    Me.ListBox1.Items.Add("平成")

    '平成を既定値として選択
    Me.ListBox1.SetSelected(3, True)

  End Sub

----------------------------------------------------------------------
 ■■ ListBoxに表示した部門名から選択した部門名の部門コードを取得 ■■

今回はWindows版を、次回はWebForm版を予定しています。

リストボックスListBox1に、部門テーブルの全部門名を表示する。表示した部
門名をひとつのみ選択できるようにする。部門名をクリックしたら、その部門
コードをラベルlblBumonCodeに表示する。

部門テーブルは、sample.mdbに次のように作成してあります。

key フィールド名   データ型   サイズ  値要求  空文字列の許可
------------------------------------------------------------
● 部門コード  テキスト型   3 はい  いいえ
− 部門名    テキスト型  20 はい  いいえ
− 更新日時   日付/時刻型  − はい  −

最初に、新規プロジェクトをひとつ作成してください。ツールボックスから、
次のコントロールを貼り付け、プロパティを設定します。

┏━━━━━━━━━━━━━━━━━━━┓
┃   ListBox1       Label1
┃┌―――――┐ ┌―――――┐
┃│     │ │部門コード│
┃│     │ └―――――┘
┃│     │
┃│     │  lblBumonCode
┃│     │  ┌――――┐
┃└―――――┘  └――――┘
┗━━━━━━━━━━━━━━━━━━━┛

               コントロール    プロパティ  設定値
 --------------------------------------------
    ListBox1        ---        ---
    Label1          Text       部門コード
    lblBumonCode    Text       ""

リストボックスに、部門テーブルの全部門名を表示するために、DataAdapter
オブジェクトのFillメソッドを使います。
まず、DataAdapterオブジェクトとDataSetオブジェクトを生成します。引数に、
DataSetオブジェクトとテーブル名を指定して、Fillメソッドを呼び出します。

  Dim oDataAdapter As New OleDbDataAdapter()
  Dim oDataSet As New DataSet()

  oDataAdapter.Fill(oDataSet, "部門テーブル")

リストボックスに部門名を表示するために、DisplayMemberプロパティに
"部門名"を設定します。選択した部門のコードを取得するためには、
ValueMemberプロパティに"部門コード"を設定します。そして、DataSource
プロパティに、データセットに格納されている"部門テーブル"を設定します。

  ListBox1.DisplayMember = "部門名"
  ListBox1.ValueMember = "部門コード"
  ListBox1.DataSource = oDataSet.Tables("部門テーブル")

これで、リストボックスに表示した部門名をクリックすると、その部門コード
を取得することができます。

部門名をクリックして選択すると、SelectedIndexChangedイベントが発生しま
すので、そのイベントハンドラの中で、リストボックスのSelectedValueプロ
パティを参照すると、クリックした部門名の部門コードを取得できます。

今回はラベルに部門コードを表示して、正しく部門コードが取得されたことを
確認しています。では、プログラムソースリストを掲載します。

--【プログラムソースリスト】------------------------------------------

Option Strict On
Imports System.Data.OleDb

Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Windows フォーム デザイナで生成されたコード "
  '自動生成部分省略
#End Region

  Private oDataAdapter As New OleDbDataAdapter()
  Private oDataSet As New DataSet()

  Private Sub Form1_Load(ByVal sender As System.Object, _
                  ByVal e As System.EventArgs) Handles MyBase.Load

    Dim oConn As New OleDbConnection()
    Dim oCommand As New OleDbCommand()

    Try
      'DB接続文字列の設定
      '注:プロジェクトファイルホルダの下にあるbinホルダにMDBを置く
      oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + _
      " Data Source=" + Application.StartupPath + "¥sample.mdb"

      'コネクションの設定
      oCommand.Connection = oConn

      'DB接続を開く
      oConn.Open()

      'SQL文の設定
      Const strSelect As String = "SELECT 部門コード, 部門名 " + _
      "FROM 部門テーブル ORDER BY 部門コード"
      oCommand.CommandText = strSelect

      'データを取得する
      oDataAdapter.SelectCommand = oCommand
      oDataAdapter.Fill(oDataSet, "部門テーブル")

      'リストボックスに部門名を表示する設定
      Me.ListBox1.DisplayMember = "部門名"

      '部門名に対応した部門コードを取得できるようにする設定
      ListBox1.ValueMember = "部門コード"

      'データ連結を行なう
      Me.ListBox1.DataSource = oDataSet.Tables("部門テーブル")

    Catch oExcept As Exception
      '例外が発生した時の処理
      MessageBox.Show(oExcept.Message, "エラー")

    Finally
      'DB接続を閉じる
      If Not oConn Is Nothing Then
        oConn.Close()
      End If

    End Try

  End Sub

  Private Sub ListBox1_SelectedIndexChanged( _
         ByVal sender As System.Object, ByVal e As System.EventArgs) _
                                 Handles ListBox1.SelectedIndexChanged

    '選択した部門コードをラベルに表示
    Me.lblBumonCode.Text = CStr(Me.ListBox1.SelectedValue)

  End Sub

End Class

----------------------------------------------------------------------
 ■■ VB.NETワンポイントオブジェクト指向:コントロールの動的生成 ■■

動的にリストボックス等のコントロールを生成することができます。下記サン
プルを参考にして、様々なコントロールを動的に生成してみましょう。

#Region" Windows フォーム デザイナで生成されたコード " 〜 #End Region
内のコードが参考になります。

  Private Sub Form1_Load

    '----- ListBox2をForm1_Loadで動的に生成 -----
    'リストボックスのインスタンスを生成
    Dim ListBox2 As ListBox = New ListBox()

    'リストボックスのプロパティ設定
    ListBox2.ItemHeight = 12
    ListBox2.Location = New System.Drawing.Point(136, 12)
    ListBox2.Name = "ListBox2"
    ListBox2.Size = New System.Drawing.Size(80, 124)
    ListBox2.TabIndex = 0

    'フォームに追加
    Me.Controls.Add(ListBox2)

  End Sub

----------------------------------------------------------------------
                      ■■ 次号予告 ■■

第8号(6月11日発行予定)  月3回位発行予定

1. VB.NETワンポイント
2. ListBoxに表示した部門名から選択した部門名の部門コードを取得
                       ◆ webForm版 ◆

======================================================================
VB.NET データベースプログラミング奮闘記    第7号(2004.5.31)
          http://park5.wakwak.com/‾weblab/
----------------------------------------------------------------------
このメールマガジン(マガジンID: 0000128094)は、
インターネットの本屋さん『まぐまぐ』から配信されています。
  http://www.mag2.com/

【購読中止の方法】購読の中止は次のホームページからお願い致します。
  http://park5.wakwak.com/‾weblab/
  http://www.mag2.com/m/0000128094.htm
----------------------------------------------------------------------
このメールマガジン及び、すぐ使えるADO.NETの研究ホームページで公開して
いるソースプログラム・データの利用により生じた損害等については、発行者
は一切責任を負いません。
ソースプログラムの再利用は自由ですが、著作権は発行者が所有します。
このメールマガジン及び、すぐ使えるADO.NETの研究ホームページに掲載され
ている会社名・製品名等は、各社の登録商標または商標です。
======================================================================

Copyright© すぐ使えるADO.NET. All rights reserved.