在列表视图中选择的第二个项目不会显示正确的值

时间:2017-10-20 18:32:46

标签: vb.net

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

2 个答案:

答案 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.SelectedItemsListView1.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