Рейтинг:
2
William Winner
Лучшее решение...и более чистое-это:
Dim dblTotal as Double = 0
Dim dblTemp as Double
For Each lvItem As ListViewItem In ListView1.Items
If Double.TryParse(lvItem.SubItems(2).Text, dblTemp) Then
dblTotal += dblTemp
End If
Next
TextBox1.Text = dblTotal
Но вы должны знать, что первый столбец также является подпунктом, поэтому приведенный выше код суммирует значения в столбце 3. Я также добавил метод TryParse, потому что вам нужно проверить и убедиться, что в этом столбце действительно есть двойники. (Конечно, если он привязан к базе данных, а столбец является двойным столбцом, то вам это не понадобится.
Dalek Dave
Хорошо, ваш код более аккуратный!
Впрочем, я был не так уж далеко, учитывая, что бежал с макушки.
Стоит поднять голос за элегантность, которой не хватало моему коду .
Member 13439014
сэр, в решении 1, куда мне поместить этот код ?
Рейтинг:
1
Dalek Dave
Простой способ состоит в том, чтобы перебрать все строки и получить таким образом общую сумму.
Затем передайте итог в текстовое поле.
Dim Li as ListViewItem
Dim dblTotal As Double
For Each Li In ListView1.Items
If ListView1.Items.Count = 0 Then
dblTotal = 0
Else
dblTotal = dblTotal + CCur(Li.SubItems(4))
End If
Next
Я думаю, что должно работать (очевидно, редактировать для ваших нужд!)
Пометьте, если это полезно.
Johnny J.
Я думаю, что ты списываешь все со своей головы, Дэйв. Разве не должно быть:
Дим ли, как элемент listviewitem
Тусклый dblTotal как двойной
Для Каждого Li В ListView1.Предметы
Если Мыши Listview1.Предметы.Количество = 0 Тогда
dblTotal = 0, иначе dblTotal = dblTotal + возникнуть(литий.Подпунктах(4)) Если В Следующий Раз ???
Dalek Dave
Виновен по всем пунктам обвинения.
Я просто записал это, так сказать, "на копыте".
William Winner
При объявлении новой двойной, он всегда начинается с 0? Я знаю, что (в свое время), когда я изучал C++, нам говорили, что мы всегда должны инициализировать наши ints и double, а что нет, потому что объявление нового double просто назначает ему место в памяти, и это место может иметь в нем любое значение. Но разве это изменение с C#?
Если нет, то что произойдет в случае отсутствия элементов с вашим кодом?
Код внутри для каждого Li в ListView1.Элементы на самом деле никогда не будут работать, а это будет означать, что dbltotal никогда не изменит свое значение. вы никогда не должны на самом деле добраться до строки dblTotal = 0, потому что вы никогда не будете вводить для каждого блока, если нет элементов. Не будет ли лучшим вариантом:
Dim dblTotal as Double = 0
Для каждого Li в ListView1.Предметы
dblTotal += CCur (Li. SubItems(4))
Следующий
Если уж на то пошло, зачем вам использовать CCur для преобразования элемента в двойник? Это должно сделать еще одно преобразование, чтобы преобразовать этот тип валюты в двойную.
Dalek Dave
Уильям, посмотрев на него еще раз, я вижу, что вы, вероятно, правы, но, как я уже сказал, я просто ударил его, не проверяя слишком глубоко.
Я думаю, что мой код будет работать (с несколькими хитростями), но согласитесь, что он немного неуклюж.
Кроме того, CCur появился в силу привычки! В конце концов, я бухгалтер, и мне приходится вкладывать это в большинство своих дел! :)