2010-04-20 8 views
0

J'ai un contrôle ListView mis en place en mode détails, et sur un bouton, je voudrais récupérer toutes les valeurs de colonne de cette ligne dans le ListView.Obtention des valeurs ListView dans un tableau de chaînes?

Ceci est mon code à ce jour:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 
    Dim items As ListView.SelectedListViewItemCollection = _ 
    Me.ManageList.SelectedItems 
    Dim item As ListViewItem 
    Dim values(0 To 4) As String 
    Dim i As Integer = 0 
    For Each item In items 
     values(i) = item.SubItems(1).Text 
     i = i + 1 
    Next 
End Sub 

Mais values vient juste comme un tableau vide. Des idées? Je veux juste que le tableau values soit rempli avec les données de cette ligne ListView.

Cheers.

+0

Des valeurs sont-elles réellement sélectionnées avant d'avoir cliqué sur le bouton? –

+0

Ouais, je m'assure que j'ai sélectionné quelque chose :) – Andrew

Répondre

0

Juste pour vérifier, savez-vous que item.SubItems (1) .Text obtiendra les textes de la deuxième colonne? Et puisque vous utilisez SelectedItems, il ne regarde que les éléments actuellement sélectionnés dans ListView.

Editer: Etes-vous sûr qu'il y aura toujours un maximum de 5 éléments sélectionnés dans le ListView? Sinon, vous aurez des problèmes avec

Dim values(0 To 4) As String 
+0

Ouais, je suis conscient que c'est 0 basé et en regardant les éléments sélectionnés est ce que je veux :) – Andrew

+0

Ensuite, je ne peux pas penser à anyhting plus puisque le code ci-dessus fonctionne (pour jusqu'à 5 sélections). –

+0

Vous n'avez aucune colonne cachée (largeur 0) de sorte que vous pourriez lire le mauvais? –

1

Vous devez itérer les SubItems, et non pas les éléments sélectionnés. Correction:

If Me.ManageList.Items.Count <> 1 Then Exit Sub 
Dim row As ListViewItem = Me.ManageList.Items(0) 
Dim values(0 To row.SubItems.Count-1) As String 
Dim i As Integer = 0 
For Each item As ListViewItem.ListViewSubItem In row.SubItems 
    values(i) = item.Text 
    i = i + 1 
Next 
0

question Vieux, je sais ... peut-être que cela aide pour référence .. someones a trébuché sur cette question dans une recherche d'autre chose.

Cela fonctionne ... pas sûr si l'affiche d'origine en quelque sorte utilisé un colelciton empy d'articles sélectionnés ...

également, un tableau de redimensionnement dynamique en fonction des éléments sélectionnés pour surmonter les bugs ... unforseen

Dim valueArray(mylistview.SelectedItems.Count - 1) As String 
    Dim i As Integer 

    For Each Item As ListViewItem In mylistview.SelectedItems 
     valueArray(i) = Item.Text 
     i += 1 
    Next 

Pour obtenir, utilisez item.subitems Sous-options (1) .text ... sous-éléments (2) .text .. etc

Vive

2

est ici la seule solution en ligne:

mylistview.Items.Cast(Of ListViewItem).Select(Function(lvi As ListViewItem)lvi.SubItems(1).Text).ToArray()