テクパー2020
テクニカルヘルパー


 VisualBasic アプリ開発入門 

『データグリッドビュー(DataGredView)』<データリーダー>

コンボボックスとデータベースのバインドが両立できない?データリーダーを使って処理します。

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0  

'SQLサーバーのインポート
Imports System.Data.SqlClient

Public Class Form1

    'データベース(SQLサーバー)の定義
    Private dbCon As New SqlConnection()                                'データベースのコネクション
    Private dbCmd As New SqlCommand()                                   'データベースのコマンド
    Private dbDr As SqlDataReader                                       'データベースのデータリーダー

    '******************************************************************************
    '*  フォームのロード(イベント処理)
    '******************************************************************************
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        'データグリッドビューの列見出し(タイトル名,幅)の定義
        Dim aryColHeader() As String = {"ユーザーID", "操作者名", "パスワード", "性別", "作成日"}
        Dim aryColLength() As Integer = {160, 180, 160, 60, 100}

        Dim aryList As New ArrayList()
        Dim rowInfo() As String

        '性別コンボボックスの定義(性別)
        Dim comboBoxCol As New DataGridViewComboBoxColumn

        'データベース接続(Data Source=サーバー名,Catalog=データベース名)
        dbCon.ConnectionString =
              "Data Source=PUBLIC\SQLEXPRESS;Initial Catalog=dbExpress;Integrated Security=True"
        dbCon.Open()

        dbCmd.Connection = dbCon

        '性別テーブルの検索(SQL文)の設定
        Dim strSQL As String = "SELECT seibetu_kanji" _
                              & "  FROM exp_seibetu" _
                              & " ORDER BY seibetu"

        '性別テーブルの検索
        dbCmd.CommandText = strSQL
        dbDr = dbCmd.ExecuteReader()

        aryList.Clear()
        aryList.Add("")

        '性別テーブルより情報の取得
        While dbDr.Read()

            aryList.Add(dbDr("seibetu_kanji"))

        End While

        'データリーダーの解放
        dbDr.Close()

        '性別コンボボックスにバインド
        comboBoxCol.DataSource = aryList

        'データグリッドビューの編集(コンボボックスセルがある場合、Columns.Addで列を設定)
        With DataGridView1

            .Columns.Clear()

            'データグリッドビューのプロパティ
            .BackgroundColor = Color.LightGray                          '背景色
            .RowsDefaultCellStyle.BackColor = Color.Honeydew            '行の背景色
            .AlternatingRowsDefaultCellStyle.BackColor = Color.Ivory    '行の交互背景色

            'データグリッドビューの列数の設定(Columns.Addの場合、列数の指定は不要)
            '.ColumnCount = 5

            'データグリッドビューの列情報の設定
            For i As Integer = 0 To 4 '.Columns.Count - 1

                '.Columns(i).HeaderText = aryColHeader(i)               '列ヘッダーのタイトル
                If i = 3 Then                                           '勤務区別(コンボボックス)
                    comboBoxCol.HeaderText = aryColHeader(i)
                    .Columns.Add(comboBoxCol)
                Else
                    .Columns.Add("col" & i.ToString, aryColHeader(i))
                End If
                .Columns(i).Width = aryColLength(i)                     '列の幅

            Next

        End With

        'ユーザーテーブルの検索(SQL文)の設定
        strSQL = "SELECT usr.user_id AS usr_id, usr.user_name AS user_name," _
                     & " usr.pass_word AS pass_word, sei.seibetu_kanji AS seibetu_kanji," _
                     & " usr.renew_date AS renew_date" _
               & "  FROM exp_user AS usr" _
                     & " LEFT JOIN exp_seibetu AS sei ON usr.seibetu = sei.seibetu" _
               & " ORDER BY user_id"

        'ユーザーテーブルの検索
        dbCmd.CommandText = strSQL
        dbDr = dbCmd.ExecuteReader()

        'データグリッドビューの行にユーザーテーブルの取得情報の追加
        While dbDr.Read()

            ReDim rowInfo(5)
            rowInfo(0) = dbDr.GetSqlString(0)       'dbDr("usr_id")
            rowInfo(1) = dbDr.GetSqlString(1)       'dbDr("user_name")
            rowInfo(2) = dbDr.GetSqlString(2)       'dbDr("pass_word")
            rowInfo(3) = dbDr.GetSqlString(3)       'dbDr("seibetu_kanji")
            rowInfo(4) = dbDr.GetDateTime(4)        'dbDr("renew_date")
            DataGridView1.Rows.Add(rowInfo)

        End While

        'データリーダーの解放
        dbDr.Close()

        'データベース解放
        dbCmd = Nothing
        dbCon.Close()

    End Sub

End Class
    
Copyright (C) 2010 プログラミングのテクニックをあなたに!!(リトル・ヘルパー) All Rights Reserved.