2017-10-20 36 views
-1

See pic Lorsque j'ajoute toutes les colonnes de prix cela fonctionne parfaitement bien. Mais, quand je viens sélectionner ce deuxième point, il montre que la valeur de la première ligne mais lorsque je sélectionne le premier élément, il montre sa value.Anyway correcte, voici mon code:Deuxième article sélectionné dans listview n'affiche pas la valeur correcte

Private Sub btnttotal_Click(sender As Object, e As EventArgs) Handles btnttotal.Click 

     Dim totalPrice As Integer = 0 
     Dim i As Integer = 0 
     Do While (i < ListView1.SelectedItems.Count) 
      totalPrice = (totalPrice + Convert.ToInt32(ListView1.Items(i).SubItems(2).Text)) 
      i = (i + 1) 
      txttotal.Text = totalPrice 
     Loop 


    End Sub 
+0

'Lorsque j'ajoute toutes les colonnes, je suppose que vous voulez dire * lignes *. Mais le code ajoute les lignes 0 à 'ListView1.SelectedItems.Count - 1' qui, avec seulement 2 lignes, est cette première ligne. S'il vous plaît lire [demander] et prendre le [tour] – Plutonix

Répondre

0

Essayez ceci:

Private Sub btnttotal_Click(sender As Object, e As EventArgs) Handles btnttotal.Click 

    Dim totalPrice As Integer = 0 
    Dim i As Integer = 0 
    Do While (i < ListView1.SelectedItems.Count) 
     totalPrice = (totalPrice + Convert.ToInt32(ListView1.SelectedItems(i).SubItems(2).Text)) 
     i = (i + 1) 
     txttotal.Text = totalPrice 
    Loop 

End Sub 

Si vous regardez la solution ci-dessus, pour calculer le total, seules les valeurs sélectionnées doivent être prises en compte. Mais vous calculiez pour toutes les lignes de la liste par cette ligne totalPrice = (totalPrice + Convert.ToInt32(ListView1.Items(i).SubItems(2).Text)). Ainsi, lorsque vous sélectionnez la deuxième ligne, votre DO WHILE ne boucle qu'une seule fois car la ligne sélectionnée est une, et votre calcul sélectionnait des valeurs depuis le début et 100 est la première valeur et elle s'arrêtait avec cela. J'espère que vous comprenez l'erreur.

Si vous voulez faire le calcul efficace et simple, je dirais ceci:

Dim totalPrice As Integer = 0 
For Each item As ListViewItem In ListView1.SelectedItems.Cast(Of ListViewItem)() 
    totalPrice += Convert.ToInt32(item.SubItems(2).Text) 
Next 

txttotal.Text = totalPrice 
0

Vous confondez les index des éléments sélectionnés avec ceux de tous les éléments. ListView1.SelectedItems et ListView1.Items sont deux collections différentes.

Si serait plus facile d'obtenir juste la somme comme ça

Dim totalPrice As Integer = ListView1.SelectedItems _ 
    .Cast(Of ListViewItem)() _ 
    .Sum(Function(item) Convert.ToInt32(item.SubItems(2).Text)) 

Cette collection SelectedItems énumère directement sans utiliser les index.

Pour Avoi à l'aide des index, vous pouvez également le faire avec pour chaque boucle

Dim totalPrice As Integer = 0 
For Each item As ListViewItem In ListView1.SelectedItems.Cast(Of ListViewItem)() 
    totalPrice += Convert.ToInt32(item.SubItems(2).Text) 
Next 

Au lieu d'utiliser l'événement d'un simple clic, vous pouvez aussi Upate le prix total textbox en utilisant l'événement SelectedIndexChanged du ListView . Ce serait mis à jour automatiquement.

Private Sub ListView1_SelectedIndexChanged(ByVal sender As Object, _ 
     ByVal e As System.EventArgs) _ 
    Handles ListView1.SelectedIndexChanged 

    Dim totalPrice As Integer = 0 
    For Each item As ListViewItem In ListView1.SelectedItems.Cast(Of ListViewItem)() 
     totalPrice += Convert.ToInt32(item.SubItems(2).Text) 
    Next 
    txttotal.Text = CType(totalPrice, String) 
End Sub