【问题标题】:VB.NET listview not showing all data from datasetVB.NET 列表视图未显示数据集中的所有数据
【发布时间】:2013-08-09 09:33:18
【问题描述】:

这个问题快把我逼疯了,我不知道为什么会这样。我正在使用 vb.net 在访问数据库中运行查询,然后将数据放入列表视图中。代码:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim strAccessConn As String = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source = T:\mydb.accdb"
    Dim cn As OleDbConnection = New OleDbConnection(strAccessConn)
    Dim ds As New DataSet
    Dim dt As DataTable

    'Note the query is entered as a string.
    Dim da As New OleDbDataAdapter("Q_LIST", cn) 'is the name of the query in Access 

    'Set the CommandType of the SelectCommand to TableDirect
    da.SelectCommand.CommandType = CommandType.TableDirect
    da.Fill(ds, "mytable")
    dt = ds.Tables("mytable")

    ListViewBatchResults.MultiSelect = True
    ListViewBatchResults.View = View.Details
    ListViewBatchResults.GridLines = True
    ListViewBatchResults.Columns.Clear()
    ListViewBatchResults.Items.Clear()

    For Each col As DataColumn In dt.Columns()
        ListViewBatchResults.Columns.Add(col.ToString)
    Next

    MsgBox(dt.Rows.Count)

    For Each row As DataRow In dt.Rows()

        Dim lst As ListViewItem

        lst = ListViewBatchResults.Items.Add(row(0))

        For i As Integer = 1 To dt.Columns.Count - 1
            lst.SubItems.Add(row(i))
        Next

    Next


End Sub

虽然这个列表视图没有显示所有返回的数据,但我不知道为什么 - 它适用于数据库中的其他查询,但由于某种原因不适用于这个查询。行数显示有 264 行,但是当我运行项目时,列表视图仅显示其中 3 行。到底是怎么回事?

干杯!

【问题讨论】:

  • 您提供的信息无法帮助您:如果 dt 填充正确,您应该不会发现任何问题,因此问题在于 dt。提供您正在使用的查询或 dt 中的信息(Rows.Count 可能很高,但大多数行可能为空)。
  • 我玩得更久了,还使用了另一个查询:SELECT TESTS.* FROM TESTS;这将返回 95 行,其中非空白行 - 但是列表视图仅显示其中约 10 行。我开始认为这是 VB 的错误?
  • 在开始考虑这样的事情之前,请先尝试一下“您的程序/数据库中很可能存在错误”选项:)。在得出如此激进的结论之前,让我们一步一步地分析,你不觉得吗? dt.Rows 被视为(可枚举的)集合,我从来没有(但从来没有……)听说过 for each 循环遍历集合中的错误。首先要确保迭代是正确的。在 lst.SubItems.Add(row(i)) 中设置一个断点,看看值是否正确
  • 您的代码中还有很多我不明白的地方:您正在填充 lst 但包含 ListViewBatchResults 的列?另外,您到底打算用 lst = ListViewBatchResults.Items.Add(row(0)) 做什么?...在​​逐个值查看之前,您不介意解释您要填充的列表吗?
  • 好的,注释掉以下内容:'For i As Integer = 1 To dt.Columns.Count - 1 'lst.SubItems.Add(row(i)) 'MsgBox(i) 'Next Allows用数据库中的数据填充的第一列......所以是的,它是糟糕的编码:)

标签: database vb.net listview datatable dataset


【解决方案1】:
Dim lst As ListViewItem

到

Dim lst As New ListViewItem

【讨论】:

    猜你喜欢
    • 2014-10-28
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    相关资源
    最近更新 更多