VB2008・DataGridの表示について

このQ&Aのポイント
  • VB2008・DataGridの表示についてのエラーについて解説します。
  • DataGridを使用してsqlcompactで作られたテーブルのデータを表示する際に表示できないエラーが発生します。
  • 特定のカラムのみ表示し、ヘッダーを編集したい場合の方法について説明します。
回答を見る
  • ベストアンサー

VB2008・DataGridの表示について

フォーム上にDataGridを設置してsqlcompactで作られたテーブルのデータを表示しようとして 以下のソースを実行すると、エラーになり表示できませんでした。 もし、原因がわかるかたがいらっしゃいましたら教えてくださると助かります。 表示するにあたり、テーブルの特定のカラムだけ表示して、ヘッダーを編集したい。 テーブルの全レコードではなくて対象レコードのみを表示 Dim cn As New System.Data.SqlServerCe.SqlCeConnection Dim SQL As System.Data.SqlServerCe.SqlCeCommand Dim db_sql As String ' テーブルスタイルを生成する Dim dgStyle As DataGridTableStyle = New DataGridTableStyle() dgStyle.MappingName = "表示用テーブル" ' 列スタイルを生成し、プロパティを設定する Dim col(4) As DataGridTextBoxColumn col(0) = New DataGridTextBoxColumn() col(0).HeaderText = "商品コード" col(0).MappingName = "商品コード" col(0).Width = 50 col(1) = New DataGridTextBoxColumn() col(1).HeaderText = "商品名" col(1).MappingName = "商品名" col(1).Width = 100 ' 列スタイルをテーブルスタイルに追加する dgStyle.GridColumnStyles.Add(col(0)) dgStyle.GridColumnStyles.Add(col(1)) ' テーブルスタイルをグリッドに追加する Me.DataGrid_Display.TableStyles.Clear() Me.DataGrid_Display.TableStyles.Add(dgStyle) 'DBのパスをセットしてオブジェクト化 cn.ConnectionString = "Data Source=" & DB_PATH & ";Password=" & DB_PASSWORD & ";Persist Security Info=True;" SQL = cn.CreateCommand 'データグリッドを表示する Dim dbadp As System.Data.SqlServerCe.SqlCeDataAdapter Dim dbtabl As DataTable Dim aa As DataSet db_sql = "SELECT syohinno, syohinryaku, suryo1, suryo2, suryo3 FROM porsj05_tempo ORDER BY date DESC" dbadp = New SqlCeDataAdapter(db_sql, cn) dbtabl = New DataTable dbtabl.Locale = System.Globalization.CultureInfo.InvariantCulture dbadp.Fill(dbtabl) Me.DataGrid_Display.DataSource = dbadp Me.DataGrid_Display.Refresh() エラー箇所 Me.DataGrid_Display.DataSource = dbadp エラー内容 Complex DataBinding は IList または IListSource のどちらかをデータソースとして受け入れます。 'System.ArgumentException' の初回例外が System.Windows.Forms.dll で発生しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

DataAdapter なんか設定できないよ。当然でしょう。 カップにコーヒーを淹れて、「カップを食べろ」と言っているようなもの。 設定するなら DataTable か DataSet でしょう。

hide-022
質問者

お礼

ありがとうございました

hide-022
質問者

補足

>>MARU4812さん 回答ありがとうございました。 一応自己解決しました。 そもそも使い方がおかしかったわけですよね・・・ 次回からはもうちょっとよく考えるようにします。 ↓ 一応、回答 (誤)col(0).MappingName = "商品コード" (正)col(0).MappingName = "ryohincd" DBの列名を指定する (誤)dbtabl = New DataTable (正)dbtabl = New DataTable("表示用") マッピング名を指定してオブジェクト生成 (誤)Me.DataGrid_Display.DataSource = dbadp (正)Me.DataGrid_Display.DataSource = dbtabl データアダプタではなくて、データテーブルを指定

関連するQ&A

  • SQLServerデータをDataGridに表示時にエラーが発生

    SQLServerデータをDataGridに表示時にエラーが発生 visual Studio2008を使用し、SQLServerから条件を指定しそれをDataGridに一覧表示するvbを組んでいますが、エラーが解消しなく困っております。対応方法について教えてください。 【状況】 1 Dim St As String 2 Dim Cn As New System.Data.SqlClient.SqlConnection 3 Dim SQL As System.Data.SqlClient.SqlCommand 4 Dim ServerName As String = "Server名"  5 Dim UserID As String = "id" 6 Dim Password As String = "×××" 7 Dim DatabaseName As String = "Dbname" 8 Dim Adapter As New SqlClient.SqlDataAdapter(SQL, Cn) 9 Dim table As New DataTable 10 St = "Server=" & ServerName & ";" 11 St &= "User ID=" & UserID & ";" 12 St &= "Password=" & Password & ";" 13 St &= "Initial Catalog=" & DatabaseName 14 Cn.Open() 15 Cn.ConnectionString = St 16 SQL = Cn.CreateCommand 17 SQL.CommandText = ("SELECT * FROM CUSTOMER_M WHERE CUSTOMER_NAME LIKE " & "'%' & TextBoxName.Text & '%'") 18 Adapter.Fill(table) 19 DataGrid1.DataSource = table 20 Cn.Close() 21 SQL.Dispose() 22 Cn.Dispose() 8行目の「Adapter」がエラーになり、オーバーロードの解決に失敗しましたとメッセージが出ています。8行目の(SQl、Cn)を省くとコンパイルエラーはなくなりますが、14行目でエラーになります。 宜しくお願いします。

  • DataGridに表示されない

    VB6でMySQL4.1に接続して MySQL内にあるデータベース"sample"の テーブル"総合"をDataGridに表示したいのですが できません。 エラーメッセージは "実行時エラー '7004': 行セットにはブックマークを設定できません" とでます。 どうしたら表示されるのでしょうか? Private Sub form_load() Dim cn As ADODB.Connection 'オブジェクト Dim rs As ADODB.Recordset 'データベースに接続 Set cn = New ADODB.Connection 'データベース:Sheet1 cn.ConnectionString = "Provider=MSDASQL.1;" _ & "Data Source=sample" cn.Open 'レコードセットの取得 Set rs = New ADODB.Recordset rs.ActiveConnection = cn rs.Source = "総合" rs.CursorType = adOpenStatic rs.LockType = adLockOptimistic rs.Open Set DataGrid1.DataSource = rs End Sub

  • VB2005 DataGrid1初期化について

    はじめまして。 VB2005 DataGrid1の初期化について質問があります。 下記処理を実行すると、 一度目のFormBを表示ではDataGridに正しく表示されます。 FormBにてボタンEndを押し、再度FormBを表示すると DataGridの表示が化けてしまいます。 (縦・横のスクロールバーが表示されなくなり、  列・行の幅も小さくなっている) DataGrid自体は何も設定していなく、 表示内容に対して自動でDataGridを調整してくれる ものだと思っておりました。 何か初期化(Me.DataGrid1.Refresh)などが問題なので しょうか? 長文になりましたが、何か少しでも解決策をお願いします。 Private Sub Form_Load 'FormBを表示  FormB.ShowDialog  '再度FormBを表示  FormB.ShowDialog Exit Sub Private Sub FormB_Load  Dim Aclone As New ADODB.Recordset  'Aclone設定  If Aclone .State = ADODB.ObjectStateEnum.adStateOpen Then   Aclone .Close()  End If  'DataGrid初期化  Me.DataGrid1.Refresh()  'XXXX(接続・テーブル情報)の内容をAcloneにセット)  Aclone = XXXX.clone  'AcloneをDataGridにセット  Me.DataGrid1.DataSource = Aclone Exit Sub Private Sub FormB_Btn_End  Me.Hide Exit Sub

  • ASP.NET DataGridのハイパーリンク

    以下のようにASP.NETにて、DataGridへデータをセットし表示したのですが、さらにヘッダーの項目名(名前、年齢)をハイパーリンクにし、クリックして別の詳細ページへ飛ぶなどの動作をさせたいと考えています。 いろいろ調べましたが、記述方法がわかりません。 どなたかアドバイスお願いします。 ---------------------------------------------------- Private Sub Page_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) ' DataGridへバインドする If Not Me.IsPostBack Then ' 独自のDataAdapterを作成する Dim da As New SqlDataAdapter( _ "SELECT fullname as 名前, age as 年齢 FROM person", _ Me.SqlConnection1) Dim ds As New DataSet ' データ検索 da.Fill(ds) ' DataGridへバインド Me.DataView1 = New DataView(ds.Tables(0)) Me.DataBind() End If End Sub

  • DataGridの再表示について

    C#にてアプリを作成しているのですが、DataGridを使用してDBからデータを引っ張ってきているのですが、条件を変えて再検索を行ったところ次のメッセージが出てきました。「このデータ グリッドのテーブル スタイル コレクションには既に同じマップ名のテーブル スタイルが含まれています。」この意味するところ、DataGridにかかわるどこかの部分を一度クリアさせなければならないと思っていますが、どこをクリアすればよいかわからないので、お尋ねいたしました。 よろしくお願いいたします。 また、ソースを載せようと思いましたが、ちょっと長いので、リクエストがあったら、載せようかとと思います。

  • DataGridの使用方法を教えてください

    VB.NET2002で表形式で表示(参照のみ)させたいのですが,FlexGridはないようでDATAGridを使用するように書いてありましたが, DATAGridの使用方法がよく分かりません. どのような手順をふんでコードを記述するのか教えてください. 1,フォームにDATAGrid1を貼り付け. (ボタンも貼り付け,ボタンクリックでSQL実行,表示のイメージ) 2,Btn1_Clickに以下コード記述.色々参考にしていたらよく分からない状態になってしまいました... Q.フォームのプロパティでのデザインは必須なんでしょうか? Dim myConnection As New System.Data.OleDb.OleDbConnection(sConnectionString) Dim myCommand As New OleDb.OleDbCommand _ ("select * from データ", myConnection) Dim myReader As OleDb.OleDbDataReader Dim dst As New DataSet("Table") 'DataTable("DataTable") dst.Tables.Add(New DataTable("dst")) Dim dc As DataColumn myConnection.Open() myReader = myCommand.ExecuteReader 'データの読み込み While (myReader.Read) DataGrid1.DataSource = myReader.GetValue(0) End While DataGrid1.SetDataBinding(dst, "dst") myConnection.Close() myConnection = Nothing myReader.Close() myReader = Nothing myCommand = Nothing myConnection.Close() 'データベース閉じる myConnection = Nothing

  • ASP.NETで検索結果の上位50位を表示するには?

    ASP.NETで開発を初めて2,3日目です。      検索条件を入力して   結果を表示させると言う事を   やろうとしてます。   初期画面(検索条件の入力) ↓ (パラメタ渡し)   検索結果 検索条件を入れないと、全件表示になるので   表示が遅くなる、固まるなどの恐れがあるので   あらかじめ検索結果の件数を取得して   50件以上なら最初の50件だけ表示して   後はページングを言う事をやろうと思ってます。   どうゆう記述をすれば出来るでしょうか? 現在はSQL文の結果を全件表示になってます。 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim MyConnString As String = "Data Source=Oracle_server;user ID=スキーマ;PASSWORD=パスワード;" Dim cn As New OracleConnection(MyConnString) cn.Open() DIM SQL文 SQL文 ="select * from 対象TABLE WHERE 項目名 = '" & 検索条件 & "' order by " & 検索条件 Dim cmd As New OracleCommand(SQL文, cn) Dim DR As OracleDataReader = cmd.ExecuteReader() DataGrid1.DataSource = DR DataGrid1.DataBind() End Sub 

  • アクセスDbのテーブル名の取得(VB2005)

    再度の質問です アクセスDBのテーブル名を取得したのですが、方法をご教示ください。DAOでは tabledefsでとれたのですが・・ 以下のコードで先に進めません。 OpenFileDialog1.Filter = "アクセス ファイル (*.mdb)|*.mdb" OpenFileDialog1.ShowDialog() If OpenFileDialog1.FileName <> "" Then Dim St As String Dim Cn As New System.Data.OleDb.OleDbConnection Dim SQL As System.Data.OleDb.OleDbCommand Dim UserID As String = "Admin" Dim Password As String = "" Dim MDBFile As String = OpenFileDialog1.FileName Dim N As String = Microsoft.VisualBasic.Right(MDBFile, 9) St = "Provider=""Microsoft.Jet.OLEDB.4.0"";" St &= "Data Source=""" & MDBFile & """;" St &= "User ID=" & UserID & ";" St &= "Jet OLEDB:Database Password=" & Password Cn.ConnectionString = St SQL = Cn.CreateCommand Cn.Open() Dim tbl As DataTable tbl = Cn.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"}) ここでtblを見ると TABLE_CATALOG _SCHEMA _NAME _TYPE ・・・DATE_MODIFIED などは見えるのですが、これがDB内のテーブル数だけ繰り返されます。 取得したいのは、TABLE_NAME に ある 例えば "Pub-ID"に相当する内容なのですが、HELPで探しても、その方法がわかりません、ぜひ教えてください。よろしくお願いいたします。

  • VBタイムアウト

    タイムアウト、プールサイズの制限値 VB2010で業務アプリケーションの集計ツールを作成しています。 仕組みは単純で、下記の様にDateTimePicker(カレンダー)から日付を選び ボタンクリックでフォーム内のデータグリッド内に集計値が入っていく仕組みです。 'カレンダー日付選択 Sub Aggregate() '日付の取得 DateTimePicker1.Format = DateTimePickerFormat.Custom DateTimePicker1.CustomFormat = "yyyy-MM-dd 1つのフォームにデータグリッドが10個ほどあるので画面遷移までに5秒くらいかかってしまいます。 1度目の表示は問題ないのですが、日付を選択し直し2度、3度と実行すると ”タイムアウトに達しました。プールから接続を制限する前にタイムアウト期間が過ぎました。 プールされた接続がすべて使用中で、プールサイズの制限値に達した可能性があります。” と表示されてしまいます。開放も行っているつもりで原因がわかりません。 原因がわかれば教えていただきたいです。処理をスピードアップできる方法があればそれもお願いします。 接続文字は以下の通りです。 Function CONNECT(ByVal SqlText As String) As String Dim St As String Dim Cn As New System.Data.SqlClient.SqlConnection Dim SQL As New System.Data.SqlClient.SqlCommand Dim ServerName As String = "AAAAAAAAA" Dim UserID As String = "BBBBBBBBB" Dim Password As String = "CCCCCCC" Dim DatabaseName As String = "DB" Dim Adapter As New System.Data.SqlClient.SqlDataAdapter Dim Table As New DataTable Adapter.SelectCommand = SQL SQL.Connection = Cn SQL.CommandTimeout = 120 St = "Server=" & ServerName & ";" St &= "User ID=" & UserID & ";" St &= "Password=" & Password & ";" St &= "Initial Catalog=" & DatabaseName Cn.ConnectionString = St SQL.CommandText = SqlText Cn.Open() Return SQL.ExecuteScalar SQL.Connection = Nothing SQL.Transaction = Nothing SQL.Dispose() Cn = Nothing Cn.Dispose() Cn.Close() End Function データグリッドの転記は下記の様なコードをずらっと書いています。 DataGridView10(2, 3).Value = CONNECT("SELECT COUNT(*)" & _ " FROM dbo.IOTBL, dbo.APLTBL" & _ " WHERE APLTBL.APLID=IOTBL.APLID" & _ " And (APLTBL.APLTYPE='JA01')" & _ " And (APLTBL.DELETED<>'1')" )

  • VBAをVBで焼き直ししたい

    access2003 VBAで下記のように、クエリー(qqq00)を作成し、 そのクエリー元に再処理をし、テーブル(tb0)にupdateしています。 このVBAを、VB2010に焼き直しをしたいのですが、 分かりませんので教えて頂けませんか。 (access2003のプログラム) sql00 = " SELECT xren.*" _ & " FROM xren ; " sql01 = " SELECT Avg(qqq00.kei04) AS avkei04," _ & " FROM qqq00 ; " Set qrdef_0 = db.CreateQueryDef("qqq00", sql00) Set tb = db.OpenRecordset("qqq00") Do nsu = nsu + 1 tb0.AddNew tb0!ren_no = tb!ren_no tb0!avkei04 = tb!avkei04 tb0.Update tb.MoveNext Loop Until tb.EOF DoCmd.DeleteObject acQuery, "qqq00" qrdef_0.Close: Set qrdef_0 = Nothing (VB2010のプログラム) Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\xxxxxs.mdb")     Dim SQLCm As OleDbCommand = Cn.CreateCommand     Dim Adapter As New OleDbDataAdapter(SQLCm)     Dim Table As New DataTable     SQLCm.CommandText = "SELECT * xren"     Adapter.Fill(Table) ここからが分かりません。      (1)クエリー(qqq00)名のつけ方      (2)qqq00の実行方法      (3)テーブル(tb0)へのupdate方法     Table.Dispose()     Adapter.Dispose()     SQLCm.Dispose()     Cn.Dispose() End Sub

専門家に質問してみよう