VB.net将数据库查询结果填充到listview

VB.net将数据库查询结果填充到listview,vb.net,listview,Vb.net,Listview,如何将数据库查询结果填充到listview。我对行“Form1.ListView1.Items(I).SubItems(1).Text=myRow.Item(0)”有问题 下面的代码可以工作,但我需要像Excel一样访问特定的项目 For Each myRow In dt.Rows If Not IsDBNull(myRow.Item(0)) Then Form1.ListView1.Items.Add(myRow.Item(0)) 'Form1.L

如何将数据库查询结果填充到listview。我对行“Form1.ListView1.Items(I).SubItems(1).Text=myRow.Item(0)”有问题

下面的代码可以工作,但我需要像Excel一样访问特定的项目

    For Each myRow In dt.Rows

    If Not IsDBNull(myRow.Item(0)) Then
       Form1.ListView1.Items.Add(myRow.Item(0))
       'Form1.ListView1.Items(i).SubItems(1).Text = myRow.Item(0)
    End If
    If Not IsDBNull(myRow.Item(1)) Then
       Form1.ListView1.Items(Form1.ListView1.Items.Count - 1).SubItems.Add(myRow.Item(1))
      'Form1.ListView1.Items(i).SubItems(2).Text = myRow.Item(1)
    End If
    If Not IsDBNull(myRow.Item(2)) Then
       Form1.ListView1.Items(Form1.ListView1.Items.Count - 1).SubItems.Add(myRow.Item(2))
      'Form1.ListView1.Items(i).SubItems(3).Text = myRow.Item(2)
   End If
   i = i + 1
   Next

您清除了LV,因此没有要填充的项或子项。您需要创建新的ListViewItems并用DB数据填充它们。但是,如果第一个字段是bnull,则编辑将跳过添加项,这意味着您无法为该记录添加任何内容。以下内容还将“锚定”数据,以便当任何子项数据为“满”时,下一个子项不会移动到一个子项上:

Form1.ListView1.Items.Clear()

Dim lvi As ListViewItem
For Each myRow In dt.Rows

    ' create NEW listview item for this row
    lvi = New ListViewItem
    If IsDBNull(myRow.Item(0)) Then
        lvi.Text = " "           ' blank Item 
    Else         
        lvi.Text = myRow.Item(0)
    End If

    ' repeat for the sub items, adding blanks when DbNull

    If IsDBNull(myRow.Item(1)) Then
        lvi.SubItems.Add(" ")
    Else
        lvi.SubItems.Add(myRow.Item(1))
    End If

    ' etc

    Form1.ListView1.Items.Add(lvi)

Next

DataGridView
ListView
更适合这种情况,尤其是在访问类似于Excel的项目时。我认为这意味着您希望
myRow.Item(2)
始终是第二个子项。因此,上面的代码添加了空项或子项作为“占位符”

我马上就可以看到您试图添加到一个不存在的项目中。您已清除了
ListView1.Items
,然后立即尝试设置
项(1).子项(1)
的值。您需要先执行
ListView1.Items.Add()
first.“having problem”不是很描述性的。我可以看到你清理物品;这意味着您需要使用LV的新数据创建新项。清除后没有项或子项当第一项为DbNull时,新代码将不起作用-当没有项时,无法添加子项。当
myRow.Item(1)
为DbNull时,它还将
myRow.Item(2)
放入第1列。
Form1.ListView1.Items.Clear()

Dim lvi As ListViewItem
For Each myRow In dt.Rows

    ' create NEW listview item for this row
    lvi = New ListViewItem
    If IsDBNull(myRow.Item(0)) Then
        lvi.Text = " "           ' blank Item 
    Else         
        lvi.Text = myRow.Item(0)
    End If

    ' repeat for the sub items, adding blanks when DbNull

    If IsDBNull(myRow.Item(1)) Then
        lvi.SubItems.Add(" ")
    Else
        lvi.SubItems.Add(myRow.Item(1))
    End If

    ' etc

    Form1.ListView1.Items.Add(lvi)

Next