【发布时间】:2016-02-24 18:20:36
【问题描述】:
简短版:
如何向列表视图中的特定列和行添加信息?
更长的版本:
使用另一种形式的一些文本框和按钮,我可以像这样将项目添加到我的列表视图中
Dim li As ListViewItem
li = Form1.ListView1.Items.Add("1")
li.SubItems.Add(tbName1.Text)
li.SubItems.Add(Form1.tbCount1.Text)
li.SubItems.Add(tbType1.Text)
li.SubItems.Add(Form1.tbStatus1.Text)
Form1.ListView1.EndUpdate()
Form1.ListView1.Refresh()
这是目前的输出......
Tbname1.text(Channel下方的列)和tbtype1.text(Type下方的列)在我点击按钮之前在文本框中指定。
form1 中的Tbcount1.text 包含一个基于文件夹中文件数的数字。 TbStatus.text 取决于有多少文件。此计数与另一个按钮(最终是计时器)挂钩。这就是为什么您会注意到 Queue 和 Status 是空的。
现在,如果我点击那个按钮(或计时器) - 在我的其他形式的设置之前说btnUpdate,它看起来像这样
问题来了……
我现在想仅将队列 (tbcount1.text) 和状态 (tbstatus.text) 列下的信息更新为 btnUpdate
例如我有这个计数器
If Form2.cbc1.Checked = True Then
Try
Dim fileTotal As Integer
For Each item As String In lbChannel1.Items
fileTotal += My.Computer.FileSystem.GetFiles(item.ToString).Count
Next
tbCount1.Text = String.Format("{0}", fileTotal.ToString)
Catch ex As Exception
lbErrors.Items.Add(String.Concat("Error: ", ex.Message)) 'Error output
End Try
Dim tCount As Integer = 0
'Til status
If Val(tbCount1.Text) > 20 Then
tbStatus1.Text = ("Many files")
Else
tbStatus1.Text = ("Good")
End If
End If
效果很好。它在两个文本框中给了我想要的数字和单词,但目前我必须刷新整个列表视图才能将计数输出到列中。
我试过了...
将其添加到btnUpdate...
Dim str(4) As String
Dim itm As ListViewItem
str(0) = ""
str(1) = ""
str(2) = (tbCount1.Text)
str(3) = ""
str(4) = (tbStatus1.Text)
itm = New ListViewItem(str)
ListView1.Items.Add(itm)
遗憾的是,这会跳转到第二行。见下图。
这就是我想要的换句话说:当btnupdate被按下或计时器为100时;用tbcount.text 更新指定行 - 第3 列,用tbstatus.text 更新指定行 - 第5 列。这结束了我的问题。
我在 C# 中找到了一些相关信息,但我在 VB.net 中需要它。我可能很近,也可能很远。希望无论如何它是可以理解的。
【问题讨论】:
-
考虑改用绑定到 DataTable 的 DataGridView/DataGrid。
-
感谢您的意见。那确实可能会更好。但是,当我查看它时,我觉得它比列表视图更难调整。不过我可能是错的。考虑以这种方式处理列和行是否更友好?
-
ListView 旨在为您的数据提供类似于 Windows 资源管理器的界面。网格旨在处理数据的行和列。这完全取决于“调整”的定义,哪个会更好。