2015-01-10 3 views
1

Я пытаюсь получить сумму всех текущих значений в столбце 2 «ListView». Я постоянно получаю «нулевое значение» исключение для:Получите сумму всех значений в определенном столбце ListView в VB.Net

Me.ListView1.GetItemAt(ListView1.FocusedItem.Index, 2).Text) 

и я также попытался это, который до сих пор бросил исключение:

Dim X As Double = CDbl(Form1.ListView1.Items.Item(Index).SubItems(2).Text) 

блоковый код, который дает мне исключение составляет:

Public Sub getSubtotal() 
    Dim Index As Integer 
    Dim TotalValue As Double 

    For Index = 1 To Form1.ListView1.Items.Count - 1 
     Dim X As Double = CDbl(Form1.ListView1.Items.Item(Index).SubItems(2).Text) 
     TotalValue = TotalValue + X 
    Next 

    MsgBox(TotalValue) 
+1

'подпункты (0)' на самом деле является Item.Text, поэтому 'SubItems (2)' будет третьим столбцом " – Plutonix

ответ

0

вещь, чтобы иметь в виду, с ListView, что SubItem(0) относится к ListViewItem, так SubItem(1) воли г eference - первый фактический подпункт. Таким образом, ваш индекс 2 действительно ссылается на то, что появляется в третьем столбце.

Вы определяете TotalValue внутри Sub, который делает его локальной переменной - он находится только там. Предполагая, что Total представляет определенный интерес, процедура должна быть функцией, возвращающей это значение. Кроме того, ваш цикл пропускает первый элемент, немного многословный, и существование Form1. означает, что вы не используете явные ссылки формы (используйте Me для ссылки на текущий экземпляр формы):

' Optional ToDo: pass a int value indicating which "column" to add up 
Public Function GetSubTotal() As Decimal 

    Dim TotalValue As Decimal 
    Dim tmp As Decimal 

    ' arrays and collections start at index(0) not (1) 
    ' OP code would skip the first item 
    For n as Integer = 0 To ListView1.Items.Count - 1 

     ' ToDo: Not all items must have the same number of SubItems 
     ' should also check SubItems Count >= 1 for each item 
     ' try to get the value: 
     If Decimal.TryParse(ListView1.Items(n).SubItems(1).Text, tmp) Then 
       TotalValue += tmp 
     End If   
    Next 

    Return TotalValue 
End Function 
Смежные вопросы