1

我在详细模式下设置了一个包含 5 列的 ListView 控件。它由使用以下子例程的代码填充:

            For j = 0 To 14
                cmd = New OleDbCommand("SELECT TeacherName, ClassSubject, BookingDate, BookingPeriod FROM " & SchemaTable.Rows(i)!TABLE_NAME.ToString() & " WHERE (((BookingDate)=" & Chr(34) & Date.Today.AddDays(j) & Chr(34) & ") AND ((UserName)=" & Chr(34) & user & Chr(34) & "));", cn)
                dr = cmd.ExecuteReader
                Dim itm As ListViewItem
                Dim itms(4) As String
                While dr.Read()
                    itms(0) = dr(0)
                    itms(1) = SchemaTable.Rows(i)!TABLE_NAME.ToString()
                    itms(2) = dr(1)
                    itms(3) = dr(2)
                    itms(4) = dr(3)
                    itm = New ListViewItem(itms)
                    Manage.ManageList.Items.Add(itm)
                End While
            Next

请注意,这不是完整的例程,只是填充网格的位。

现在我需要从 ListView 控件中检索数据,以便删除数据库中的预订。我使用以下代码检索每列的内容:

ManageList.SelectedItems(0).Text

但它似乎只适用于索引 0。如果我这样做:

ManageList.SelectedItems(3).Text

我收到此错误:

InvalidArgument=“3”的值对“索引”无效。参数名称:索引

我很难过,对我来说,索引 1 指向第二列,索引 2 指向第三列等等,因为它是基于 0 的,这似乎是合乎逻辑的?

任何帮助将不胜感激,谢谢。

4

2 回答 2

1

当您说 时ManageList.SelectedItems(3).Text,您是在询问列表中选择的第四个项目,而不是所选项目的第四列。

MSDN

编辑:这样想:ManageList.SelectedItems(0)=itms,这是一个字符串数组。以下示例显示了如何访问列表中所选数组的第四个数组值:

Dim itms() As String = ManageList.SelectedItems(0)
If itms.Length>3 Then
    itms(3).DoWhatever
End If
于 2010-04-15T12:20:19.257 回答
0

SelectedItems 方法返回选定的 ListViewItem(s)。要访问其中的各个列,请使用SubItems属性。

文档中的注释:

ListViewItem.ListViewSubItemCollection 中的第一个子项始终是拥有子项的项。对集合中的子项执行操作时,请务必引用索引位置 1 而不是 0 来更改第一个子项。

于 2010-04-15T12:25:54.837 回答