我一直在一个相当复杂的应用程序中成功使用listviews,但我真的想使用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”和其他值(甚至是“”),但没有任何效果。
答案 0 :(得分:0)
我会在这里做一个假设,因为我还无法在你的问题中添加评论,那就是你创建了你的DataGridView并向其添加了列,与添加到dtStates的列无关。 我最近遇到了同样的问题,这引出了我的问题。 我的问题是我已经定义了一个包含3列的DataGridView,然后将其数据源设置为已经有3列的dataTable。我认为它会将数据表的列映射到DataGridView。实际上它只显示了我通过设计界面为数据表中的每一行添加的三列,但它们都是空的。
我的第一个线索就是当我选择一行并按Ctrl + C,然后将结果粘贴到Notepad ++中。我在"第一个"之前看到了4个制表位。柱。 我从DataGridView中删除了手动列定义,以便它的唯一列来自我分配给它的数据表。现在数据显示为预期。
我仍然需要弄清楚如何将列格式化为我想要的宽度,但至少现在有数据。希望有所帮助!明智地冲浪。