2010-01-11 6 views
2

J'essaie actuellement de parcourir toutes les valeurs ajoutées à une liste par l'utilisateur, cependant, je veux récupérer la valeur réelle de chaque élément dans la liste et non le texte.Comment puis-je obtenir toutes les valeurs dans une liste lors de la lecture en boucle?

Je suis arrivé si loin avec le code ci-dessous, mais cela ne reçoit que le texte et non la valeur.

For Each item In SelectedStoresLB.Items 
      Dim tCompany As Integer = CInt(Left(item.ToString, 1)) 
      Dim tStore As String = Right(item.ToString, 3) 
      Dim tReason As String = ReasonTxt.Text 
      insertSQL = "INSERT INTO [CommsDownLog] ([DimCompanyID],[PervasiveStoreNumber],[DownReason]) VALUES (" & tCompany & ", '" & tStore & "', '" & tReason & "')" 
      Dim insertRow = New SqlCommand(insertSQL, objConn) 
      Try 
       objConn.Open() 
       insertRow.ExecuteNonQuery() 
       objConn.Close() 
      Catch ex As Exception 
       Response.Write(ex) 
      End Try 
     Next 

Comment puis-je obtenir la valeur de chaque article de la collection?

Répondre

5

item est un objet ListItem - plutôt que d'appeler ToString là-dessus, vous devez utiliser les propriétés Text et Value pour obtenir les informations dont vous avez besoin.

0

Avez-vous essayé:

item.Value 
+0

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. – devundef

+0

Hmmm ... es-tu sûr que ce n'est pas une bonne réponse? Puisque 'item.Value' aurait en effet la valeur ... –

0

Vous devez être prudent lorsque vous parcourez un ListBox parce que vous pouvez finir par modifier la collection sous-jacente. En utilisant foreach comme vous êtes, vous utilisez l'énumérateur sous-jacent. Je vous recommande de modifier votre iterator à ce qui suit (exemple C#):

foreach (ListItem li in listbox.Items.ToArray()) 
{ 
    if (li.Selected) 
    { 
     Controltest2.Remove(li.Value); 
    } 
} 

En faisant cela, vous êtes modifier la collection et non de la collection de la liste du tableau. Cela suppose LINQ pour s'opposer et vous devrez peut-être appeler Cast<t> pour le faire fonctionner dans certains cas.

La raison en est la suivante:

L'instruction foreach répète un groupe d'états incorporés pour chaque élément dans un tableau ou une collection d'objets . L'instruction foreach est utilisé pour itérer la collection pour obtenir les informations souhaitées, mais ne doit pas être utilisé pour modifier les contenu de la collection pour éviter effets secondaires imprévisibles

Source: MSDN

Pour obtenir le texte souhaité après l'itération, utilisez .Value au lieu de .Text. Bien sûr, il existe d'autres façons d'itérer comme inverser avec une boucle indexée, mais c'est un autre sujet :)

1

En utilisant VB 2010, notez pour obtenir les valeurs réelles des éléments dans la liste que vous devez utiliser la propriété "Content" de l'objet ListBoxItem. Par exemple:

For i As Integer = 0 To lstSortUs.Items.Count - 1 
    sAllItems &= lstSortUs.Items(i).Content & ";" 
Next 
sAllItems = Left(sAllItems, Len(sAllItems) - 1) 
arrAllItems = sAllItems.Split(";") 
System.Array.Sort(arrAllItems) 
Questions connexes