【问题标题】:How can I add information to a specific column and row in a listview?如何将信息添加到列表视图中的特定列和行?
【发布时间】: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.textChannel下方的列)和tbtype1.textType下方的列)在我点击按钮之前在文本框中指定。

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 资源管理器的界面。网格旨在处理数据的行和列。这完全取决于“调整”的定义,哪个会更好。

标签: vb.net listview


【解决方案1】:

您可以随时轻松地直接操作列表视图项。

如果您选择了要更改的项目,您只需像这样访问它:

myListview.selecteditems(0).text = ""
myListview.selecteditems(0).subitems(1).text
myListview.selecteditems(0).subitems(2).text
myListview.selecteditems(0).subitems(3).text

您不必每次更改时都重新分配整个 listviewitem,只需更改需要更改的任何内容...

如果您没有在列表视图(行)中选择项目,您将不得不逐步浏览列表视图项目集合,直到找到您正在寻找的项目(行),然后操作它的任何部分您需要.

For each item in mylistview.items
 if item.text = "whatoever"
  'this is my item....
  'manipulate it....
  item.text = "sdfdsf"
  item.subitems(1).text = "ddsfdsfdsa"
  'etc
 end if
next

注意:子项是基于 (1) 的,而不是 0...

【讨论】:

  • 谢谢!!这几乎就是我想要的。根据您的答案测试了一些东西,现在它就像我想要的那样工作。我唯一需要更改的是因为我没有在更新时选择项目,我将“selecteditems”更改为“items”。
猜你喜欢
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
相关资源
最近更新 更多