tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルグリッドのデータを画面表示する時の確認
記事No10956
投稿日: 2012/11/17(Sat) 16:47
投稿者かっちゃん
前回はとっても助かりました
ありがとうございました
今度はグリッドのデータを項目に表示する時の確認です
よろしくお願いいたします

アクセスフィールド
SubjectNo   長整数型
ClassNo     テキスト型
Kind        バイト型
CheckFl     Yes/No型

VB2010

' データセットエリア
    Public Cmd As New OleDbCommand
    Private StandardMDs As DataSet  
    Private StandardMDt As DataTable
    Private SubjectMDs As DataSet
    Private SubjectMDt As DataTable
  Dim wkstrSql As String

   ’アクセスから読み出し
        Try
            wkstrSql = "select DISTINCT SubjectNo,SubjectNa,SubjectKna from SubjectM "  & "ORDER BY SubjectNa ASC"
            Cmd.CommandText = wkstrSql
            Adp = New OleDbDataAdapter(Cmd)
            SubjectMDs = New DataSet
            Adp.Fill(SubjectMDs, "SubjectM")
            SubjectMDt = SubjectMDs.Tables("SubjectM")
            cboBox1.DataSource = SubjectMDs.Tables("SubjectM")
            cboBox1.DisplayMember = "SubjectKna"
            cboBox1.ValueMember = "SubjectNo"
        Catch ex As Exception
            MessageBox.Show(ex.ToString, "例外発生")
        End Try
        Try
            wkstrSql = "select *  from StandardM ORDER BY SubjectNo Asc, ClassNo Asc, Kind Asc"
            Cmd.CommandText = wkstrSql
            Adp = New OleDbDataAdapter(Cmd)
            StandardMDs = New DataSet
            Adp.Fill(StandardMDs, "StandardM")
            StandardMDt = StandardMDs.Tables("StandardM")
            dgdGrid.Columns.Clear()
            dgdGrid.DataSource = StandardMDs
            dgdGrid.DataMember = "StandardM"
        Catch ex As Exception
            ' 例外が発生した時の処理
            MessageBox.Show(ex.ToString, "例外発生")
        End Try

    Private Sub dgdGrid_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgdGrid.CellClick
        Dim wkbytX As Byte
        Dim wkbytY As Byte
        For Each c As DataGridViewCell In dgdGrid.SelectedCells
            wkbytX = c.RowIndex    
            wkbytY = c.ColumnIndex  
        Next c
        If e.ColumnIndex <> -1 Then
            MsgBox("一番左側を押してください")
            Exit Sub
        Else
             wkstrSql = "select *  from StandardM WHERE SubjectNo = " & CInt(dgdGrid.Rows(wkbytX).Cells(0).Value) & " " _
                                                & " And ClassNo = '" & Trim(dgdGrid.Rows(wkbytX).Cells(1).Value) & "' " _
                                                & " And Kind = 20 " "
            Cmd.CommandText = wkstrSql
            Using dr As OleDbDataReader = Cmd.ExecuteReader()
                If dr.HasRows = False Then
                     MessageBox.Show("レコードがありません")
                End If
            End Using
        End If
        Call DataMove()
    End Sub

  Public Sub DataMove()
        Using dr As OleDbDataReader = Cmd.ExecuteReader()
            If dr.HasRows = True Then
                  While dr.Read()
                    Dim wkTbl As New DataTable
                    Dim dtRow As DataRow()
                    wkTbl = SubjectMDs.Tables("SubjectM")
                    dtRow = wkTbl.Select("SubjectNo = " & dr.GetInt32(0) & " ")
                    cboBox1.Text = dtRow(0).Item("SubjectKna")
                    wkTbl = ClassMDs.Tables("ClassM")
                    dtRow = wkTbl.Select("ClassNo = '" & dr.GetString(1) & "' ")
                    cboBox2.Text = dtRow(0).Item("ClassNa")
                    chkBox3.Checked = dr.GetBoolean(3)
                End While
            Else
                 MessageBox.Show("レコードがありません")
            End If
        End Using
    End Sub

*** グリッド表示(下記の順) ***
   SubjectNo     ClassNo      Kind    CheckFl(Yes/No)

  ここで質問ですが、上記のロジックでグリッドの内容を各項目に表示させることが可能
    ですので目的は達成です。
  しかしながら、一度データテーブルに抽出したデータを利用せずに、直接データベース
    よりもってくるロジックなので、しっくりきません。
  作業効率的にはどうなのでしょうか。
  もっと良い方法がありましたらよろしくお願いいたします。

[ツリー表示へ]