掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
複数のDataGridにそれぞれ別のデータを表示するには? (ID:115027)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ああ、DataGrid って3個しか無いんですね?(^^;) >初回読込をした場合、DBにはCD「02」、「04」、「10」が格納されて >います。実際にはCDになにが格納されているかわかりませんので >select文で狙い撃ちはできません。 >検索対象である「02」をDataGrid1へ表示、「04」をDataGrid2へ表示、 >「10」をDataGrid3へ表示。 >次回読込をした場合、DBにはCD「01」、「03」、「08」が格納されて >います。こちらも実際にはCDになにが格納されているかわかりません。 >検索対象である「01」をDataGrid1へ表示、「03」をDataGrid2へ表示、 >「08」をDataGrid3へ表示。 データベースの運用上、文句を言いたい部分はありますがw とりあえず色々と変更しちゃったのでソース載せます。動作確認は SQLサーバーでやってますので、動かない部分があれば修正して下さい。 確認用に DataGrid4 を貼り付けておいて下さい。必要無くなったら コードでは Me.DataGrid4.DataSource = wDS だけ削除すれば動くと思います。 [VB.NET] ' 複数テーブル検索 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim wDS As New DataSet() Dim wDT As DataTable Dim i As Integer Dim wCnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ファイル.mdb" Dim wSqlStr As String = "SELECT * FROM HEAD WHERE CD=""" Dim wCD As String Me.DataGrid4.DataSource = wDS For i = 1 To 10 wCD = Format(i, "00") Try wDT = (Me.GetDataTableFromDataServer(wCnStr, wSqlStr & wCD & """", 15)) Catch ex As Exception MsgBox("データベース検索処理に失敗しました。") Debug.WriteLine(ex.Message) Exit Sub End Try If Not (wDT Is Nothing) Then With wDT If .Rows.Count = 0 Then ' 対象レコード無し Else .TableName = "CD" & wCD wDS.Tables.Add(.Copy) ' 検索時に DataSet に属してるため、データのみコピーしないとエラー End If End With End If ' MSDN サンプル 'Dim tablesCol As DataTableCollection '' Get the DataTableCollection of a DataGrid control's DataSet. 'tablesCol = CType(DataGrid1.DataSource, DataSet).Tables '' Create a new DataTable. 'Dim myTable As DataTable = New DataTable() '' Code to add columns and rows not shown here. '' Add the table to the DataTableCollection. 'tablesCol.Add(wDataTable.Copy) Next With wDS.Tables 'CType(Me.DataGrid4.DataSource, DataSet).Tables For i = 1 To .Count Select Case i Case 1 Me.LabelA.Text = .Item(i - 1).Rows.Count Me.DataGrid1.DataSource = .Item(i - 1) Case 2 Me.LabelB.Text = .Item(i - 1).Rows.Count Me.DataGrid2.DataSource = .Item(i - 1) Case 3 Me.LabelC.Text = .Item(i - 1).Rows.Count Me.DataGrid3.DataSource = .Item(i - 1) Case Else MsgBox("4件以上検索されてますよ?") Exit Sub End Select Next End With End Sub Private Function GetDataTableFromDataServer( _ ByVal CnStr As String, _ ByVal SQLx As String, _ ByVal TimeoutVal As Integer _ ) _ As DataTable Dim DA As IDbDataAdapter Dim Cn As IDbConnection Dim Cmd As IDbCommand Dim Prm As IDataParameter Dim DS As New DataSet() Dim DT As New DataTable() Dim i As Integer 'Select Case ServerKind ' Case ServerKindInfo.SQLServer 'Cn = New SqlClient.SqlConnection() 'Cmd = New SqlClient.SqlCommand() 'DA = New SqlClient.SqlDataAdapter() ' Case ServerKindInfo.Oracle ' Cn = New OracleClient.OracleConnection() ' Cmd = New OracleClient.OracleCommand() ' DA = New OracleClient.OracleDataAdapter() 'End Select Cn = New OleDb.OleDbConnection() Cmd = New OleDb.OleDbCommand() DA = New OleDb.OleDbDataAdapter() Cn.ConnectionString = CnStr With Cmd .CommandText = SQLx Debug.WriteLine(SQLx) .Connection = Cn .CommandTimeout = TimeoutVal End With With DA .SelectCommand = Cmd .Fill(DS) End With Cn = Nothing Cmd = Nothing DA = Nothing If DS.Tables.Count = 0 Then Return Nothing Else Return DS.Tables(0) End If End Function
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.