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」の値は「インデックス」には無効です。パラメータ名:インデックス

私はかなり困惑しています.0ベースであるため、インデックス1が2番目の列、インデックス2が3番目などを指すことは論理的に思えますか?

どんな助けでも感謝します、ありがとう。

4

2 に答える 2

1

と言うときはManageList.SelectedItems(3).Text、選択した項目の 4 番目の列ではなく、リストで選択した 4 番目の項目を求めています。

MSDNを参照

編集: 次のように考えてください: ManageList.SelectedItems(0)=itms、これは文字列配列です。次の例は、リストで選択した配列の 4 番目の配列値にアクセスする方法を示しています。

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 を返します。個々の列にアクセスするには、SubItemsプロパティを使用します。

ドキュメントからのメモ:

ListViewItem.ListViewSubItemCollection の最初のサブアイテムは、常にサブアイテムを所有するアイテムです。コレクション内のサブアイテムに対して操作を実行する場合、最初のサブアイテムに変更を加えるには、必ずインデックス位置 0 ではなく 1 を参照してください。

于 2010-04-15T12:25:54.837 に答える