0

我一直在一个相当复杂的应用程序中成功使用列表视图,但我真的很想使用 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" 和其他值(甚至是“”),但没有任何效果。

4

1 回答 1

0

我将在这里做一个假设,因为我还不能为您的问题添加评论,那就是您创建了 DataGridView 并向其中添加了列,而与添加到 dtStates 的列无关。我最近遇到了同样的问题,这导致了我的问题。我的问题是我定义了一个包含 3 列的 DataGridView,然后将其数据源设置为一个已经有 3 列的数据表。我认为它会将数据表的列映射到 DataGridView。实际上,它只显示了我通过设计界面为数据表中的每一行添加的三列,但它们是空的。

我的第一个线索是当我选择一行并按 Ctrl+C,然后将结果粘贴到 Notepad++ 中时。我在“第一”列之前看到了 4 个制表位。我从 DataGridView 中删除了手动列定义,以便它唯一的列来自我分配给它的数据表。现在数据显示如预期。

我仍然需要弄清楚如何将列格式化为我想要的宽度,但至少数据现在在那里。希望有帮助!明智地冲浪。

于 2016-05-03T19:09:59.903 回答