See pic当我添加所有价格列时,它的效果非常好。但是,当我选择第二个项目时,它只显示第一行的值,但是当我选择第一个项目时,它会显示其正确的值。无论如何,这里是我的代码:
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 :(得分:0)
试试这个:
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
如果查看上述解决方案,要计算总数,只应考虑所选值。但是您要按此行totalPrice = (totalPrice + Convert.ToInt32(ListView1.Items(i).SubItems(2).Text))
计算列表框的所有行。因此,当您选择第二行时,DO WHILE
只会循环一次,因为所选行是一行,并且您的计算是从开始选择值,而100
是第一个值,它正在停止。我希望你能理解这个错误。
如果你想有效而简单地进行计算,我会建议:
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
答案 1 :(得分:0)
您正在将所选项目的索引与所有项目的索引混合在一起。 ListView1.SelectedItems
和ListView1.Items
是两个不同的集合。
如果更容易获得这样的总和
Dim totalPrice As Integer = ListView1.SelectedItems _
.Cast(Of ListViewItem)() _
.Sum(Function(item) Convert.ToInt32(item.SubItems(2).Text))
直接枚举集合SelectedItems
,而不使用任何索引。
要避免使用索引,您也可以使用for for each
Dim totalPrice As Integer = 0
For Each item As ListViewItem In ListView1.SelectedItems.Cast(Of ListViewItem)()
totalPrice += Convert.ToInt32(item.SubItems(2).Text)
Next
您还可以使用SelectedIndexChanged
的{{1}}事件来升级总价格文本框,而不是使用按钮的点击事件。它会自动更新。
ListView