【发布时间】:2013-12-12 11:31:59
【问题描述】:
作为一个相对较新的 vb.net 用户,我感到很困惑。为什么我的列表视图没有修改列表中的值?如果可以的话,我可以正确地了解 listview 如何从数据库中显示其数据。除了代码问题,我还有一个一般性问题。
我的列表视图中有五列 (0-4)。我是否正确地说,如果我的访问数据库包含 10 个字段但我只需要显示其中五个但其中一个是字段 (9),那么将像下面的代码一样对列表进行编码,这不会改变值和如果我删除“else”语句,只会显示列表。
什么是错误?非常感谢
更新代码:
oledbCnn.ConnectionString = My.Settings.storageConnectionString
oledbCnn.Open()
'drcount = Convert.ToInt32(dr("RowCount"))
sql = "Select TOP 100 * from Requests ORDER BY [Date-time received] DESC"
Debug.Print(sql)
Dim oledbCmd As OleDbCommand = New OleDbCommand(sql, oledbCnn)
Using dr = oledbCmd.ExecuteReader()
'clear items in the list before populating with new values
'lvRequests.Items.Clear()
While dr.Read()
If dr.HasRows Then
Dim LVI As New ListViewItem
With LVI
.Text = dr(0).ToString()
.UseItemStyleForSubItems = False
.SubItems.Add(CDate(dr(5)).ToShortDateString())
.SubItems.Add(dr(1).ToString())
.SubItems.Add(dr(3).ToString())
If dr(3).ToString = "D" Then
.SubItems(3).Text = "Destroyed"
ElseIf dr(3).ToString = "O" Then
.SubItems(3).Text = "Out"
ElseIf dr(3).ToString = "I" Then
.SubItems(3).Text = "Intake"
End If
.SubItems.Add(dr(9).ToString())
If dr(9).ToString = "DEMO" Then
.SubItems(9).Text = "Done"
End If
End With
lvRequests.Items.Add(LVI)
lvcount += 1
End If
End While
End Using
【问题讨论】:
-
重要的是您的 SQL 语句中有多少列以及数据如何进入 LV。没有 SQL(因此有多少数据列要处理
SELECT *vs 'Select A, B, C, D, J FROM')。但是,如果您只向 LV 发布 5 位信息,那么您可能应该引用SubItems(5)。也可以在 LV 中隐藏 SubItems。如果您添加 9 个子项,但只定义了 5 个列,则只会显示前 5 个。很难从那个小sn-p中说出更多信息。但是,DataGridView 通常是数据网格显示的更好选择。 -
感谢 Plutonix。所以从你所说的,作为一个例子,在上面的mycode中,我想要的字段是从0开始访问的字段9,所以在我的例子中,dr(9)和subitems(9)是正确的?