かなり複雑なアプリでリストビューを正常に使用してきましたが、本当に DataGridView を使用したいのですが、機能させることができませんでした。クラスまたは独自の疑似ミドルウェアを使用してデータを読み取り、テーブルをコントロールにバインドすることを避けています。正しく動作しないコードの簡単な例を次に示します。
Dim ds As New DataSet
Dim nrows as Integer
ds = dbio.ReadLocations("") 'Reads place names, with an optional search string
nrows = ds.Tables(0).Rows.Count
'Note: I can insert code here that successfully displays the data in a listview
Dim dtStates As DataTable = New DataTable("TableName")
Dim drStates As DataRow 'A component row of dtstates
Dim dr As DataRow 'A component row of the result set, ds
dtStates.Clear()
'There are just 3 columns in the data grid
dtStates.Columns.Add("ID", GetType(String))
dtStates.Columns.Add("StateName", GetType(String))
dtStates.Columns.Add("Country", GetType(String))
'Build the data table, row-by-row
For i = 1 To nRows
dr = ds.Tables(0).Rows(i - 1) 'Get a row from the populated data set
drStates = dtStates.NewRow 'Create a new row object
'Populate the new row object
drStates("ID") = dr("ID").ToString
drStates("StateName") = dr("StateName")
drStates("Country") = dr("Country")
'Put the new row object into the data table
dtStates.Rows.Add(drStates)
Next
'Bind the DataGridView to my data table
grdStates.DataSource = dtStates
私のグリッドはいわば「点灯」し、明らかに適切な数の行があり、データがありません。私の最善の推測は、DataGridView の DataMember を定義する必要があるということですが、そこにどの値を配置する必要があるか想像できません。grdStates.DataMember="TableName" およびその他の値 ("" も含む) を試しましたが、何も機能しません。