我在详细模式下设置了一个包含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'不是 对'index'有效。参数名称: 索引
我非常难过,对我来说,索引1将指向第二列,索引2指向第三列等,因为它基于0,这似乎是合乎逻辑的?
任何帮助都将不胜感激,谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
SelectedItems方法返回选定的ListViewItem。要访问其中的各个列,请使用SubItems属性。
请注意文档:
第一个子项目 ListViewItem.ListViewSubItemCollection 永远是拥有的项目 子项目。执行操作时 在集合中的子项目,请确保 改为引用索引位置1 0表示更改第一个 子项。