タイトル | : グリッドのデータを画面表示する時の確認 |
記事No | : 10956 |
投稿日 | : 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)
ここで質問ですが、上記のロジックでグリッドの内容を各項目に表示させることが可能 ですので目的は達成です。 しかしながら、一度データテーブルに抽出したデータを利用せずに、直接データベース よりもってくるロジックなので、しっくりきません。 作業効率的にはどうなのでしょうか。 もっと良い方法がありましたらよろしくお願いいたします。
|