Краткая версия:

Как я могу добавить информацию в определенный столбец и строку в списке?

Более длинная версия:

С некоторыми текстовыми полями и кнопками в другой форме я добавляю элементы в свой список следующим образом

        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()

Это результат пока ...

enter image description here

Tbname1.text (столбец ниже Channel ) и tbtype1.text (столбец ниже Type ) указываются в текстовых полях до того, как я нажму кнопку.

Tbcount1.text в form1 содержит число, основанное на количестве файлов в папке. TbStatus.text зависит от количества файлов. Этот счетчик привязан к другой кнопке (в конечном итоге к таймеру). Вот почему вы заметите, что Queue и Status пустые.

Теперь, если бы я нажал эту кнопку (или таймер), скажем btnUpdate перед настройками в другой моей форме, это выглядело бы так

enter image description here

Вот и проблема ...

Теперь я хочу обновить только информацию в столбце Очередь (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)

К сожалению, это переходит во вторую строку. См. Изображение ниже.

enter image description here

Другими словами, вот чего я хочу: когда нажата btnupdate или таймер установлен на 100; обновить указанную строку - столбец 3 с помощью tbcount.text и обновить указанную строку - столбец 5 с помощью tbstatus.text. На этом мой вопрос завершен.

Я нашел информацию об этом на C #, но мне это нужно в VB.net. Я мог быть близко или далеко. Надеюсь, в любом случае это было понятно.

0
MadsTheMan 24 Фев 2016 в 12:53
Вместо этого рассмотрите возможность использования DataGridView / DataGrid, привязанного к DataTable.
 – 
rheitzman
24 Фев 2016 в 20:01
Спасибо за ваш вклад. Это могло быть действительно лучше. Однако, когда я взглянул на него, у меня сложилось впечатление, что его гораздо сложнее настроить, чем просмотр списка. Хотя я могу ошибаться. Будет ли удобнее работать с столбцами и строками таким образом?
 – 
MadsTheMan
25 Фев 2016 в 08:56
1
ListView предназначен для обеспечения интерфейса с вашими данными, подобного проводнику Windows. Сетки предназначены для работы со строками и столбцами данных. Все зависит от определения «настройки», какой из них лучше.
 – 
rheitzman
26 Фев 2016 в 02:03

1 ответ

Лучший ответ

Вы можете легко манипулировать элементами списка, когда захотите.

Если у вас выбран элемент, который вы хотите изменить, вы просто получаете к нему доступ следующим образом:

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

Вам не нужно повторно назначать весь listviewitem каждый раз, когда вы его меняете, просто измените все, что нужно изменить ...

Если у вас не выбран элемент в списке (строке), вам придется пройти через коллекцию listviewitems, пока вы не найдете элемент (строку), который вы ищете, а затем манипулировать любыми его частями, которые вам нужны.

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 ...

3
Louis van Tonder 24 Фев 2016 в 13:20
1
Спасибо!! Это в значительной степени то, что я искал. Протестировал несколько вещей на основе вашего ответа, и теперь он работает так, как я хочу. Единственное, что мне пришлось изменить, потому что я не выбираю элемент при обновлении, я изменил «selecteditems» на «items».
 – 
MadsTheMan
24 Фев 2016 в 14:05