Рейтинг:
2
Maciej Los
Вместо того чтобы работать с ячейками datagridview, вы должны работать с данными. Предположим, что datagridview привязан к источнику данных, например datatable...
1) Использование В LINQ[^]
Dim dt As DataTable = DirectCast(DataGrdiView1.DataSource, DataTable)
Dim result = dt.AsEnumerable() _
.Where(Function(row) row.Field(Of Integer)("WeekNo")==ComboBox1.SelectedValue) _
.Sum(Function(row) row.Field(Of Double)("Income"))
Label1.Text = result.ToString("F")
2) Использование
объект DataTable.выбранный метод[
^] и
объект DataColumn.Свойство expression[
^]
Dim findWeekNo As Integer = 3
Dim expression As String = $"WeekNo ={findWeekNo}"
Dim filteredRows As DataRow() = dt.Select(expression)
Dim sum As Double = .0
For Each dr As DataRow In filteredRows
sum+=dr("Income")
Next
Label1.Text = sum.ToString("F")
Для получения более подробной информации, пожалуйста, смотрите:
Оператор DirectCast (Visual Basic) | Microsoft Docs[
^]
Строки Стандартного Числового Формата | Microsoft Docs[
^]
Ralf Meier
написано очень мелкими буквами :
Я полагаю, что исследователь не поймет, что вы имеете в виду ...
Member 14587396
Maciej Los, запустив первый код с помощью Linq, я получил ошибку "указанное приведение недопустимо" в строке '.Where( Function (row) row.Поле( Целого Числа )( "WeekNo" )==ComboBox1.SelectedValue) _
.Sum( функция (строка) строка.Поле( Двойное )( "Доход" )'
Но чтобы вы еще больше поняли, чего я хочу добиться, вот небольшое объяснение:
В таблице данных есть два столбца: дата и сумма.
Пользователь вводит дату в каждой строке с суммой денег, сделанных в такие дни.
В конце недели он хочет рассчитать общую сумму, сделанную за эту неделю, выбрав номер недели из поля со списком, и расчет будет выполнен.
Есть 7 дней в неделю, и каждый месяц имеет до 4 или 5 недель.
Поэтому я хочу, чтобы пользователь мог выбрать номер недели, который он хочет, а затем получить общую сумму денег, заработанных за эту неделю.
Мацей Лос, я очень ценю тебя
Ralf Meier
Так что решение очень простое :
-> вы вычисляете для введенной недели (и года) начальную и конечную даты. Теперь вы должны перебрать свой DGV и посмотреть, находятся ли даты внутри этих ячеек между датой начала и датой окончания-если да (и только тогда), вы строите сумму с суммой-значениями в этой строке.
Я предлагаю вам сделать это сначала либо в вашем Datatable, либо в вашем DGV - но вручную. Позже (если это работает) вы можете искать другие способы ...
Member 14587396
Ральф Мейер, я нашел способ сделать это, следуя предложенному вами решению.
Проблема теперь полностью решена.
Спасибо!
Ralf Meier
Дополнительный :
если вы хотите ответить на комментарий, вы не должны создавать новый комментарий. Лучше всего использовать ответ-виджет из интересующего вас комментария. Если вы сделаете это таким образом, то участник из этого комментария будет автоматически уведомлен об этом ...
Если вы сделаете это, как раньше, то участники не будут уведомлены, и, возможно, вы никогда не получите дополнительного ответа или другой информации ...
Member 14587396
Спасибо... Замечено!
Рейтинг:
0
Richard MacCutchan
Dim sum as integer
For each row as Datagridview in dgvIncome.rows
if row. cells(3).value>0 then
sum=sum+row. cells (3).value
next
Вы суммируете каждую строку, содержащую значение в столбце доход. Но сначала вам нужно проверить, относится ли строка к данному пользователю. Не проверяйте, является ли значение ненулевым, но является ли идентификатор пользователя правильным.
Member 14587396
Вот что я попробовал сделать дальше...
...
Дим-сам как двойной
Для каждой строки как DatagridviewRow в dgvIncome. Строки
Если бы не dgvIncome.IsNewRow Тогда
Если dgvIncome. Ячейки("Дата").Значение=cbxWeek. Элемент Тогда
сумма=сумма+dgvIncome. Клетки("Количество").Ценность
Конец, Если
...
Но, похоже, он все еще не выполняет свою работу.
Что-то не так с кодом?
Richard MacCutchan
Не зная, что вы испытываете против него, невозможно ответить. Также заявление - похоже, он все еще не справляется с работой." не дает нам никакой информации. Пожалуйста, объясните, какие значения вы ожидаете получить и что вы получаете, и почему результат неверен. Помните, что мы не можем видеть ваш экран, поэтому мы понятия не имеем, что вы видите.
Ralf Meier
Возможно, вам следует сначала объяснить, какое содержимое находится в какой ячейке.
Глядя на ваши фрагменты кода, я предполагаю, что вы сравниваете яблоки с вишнями ...
Member 14587396
У меня есть столбец с именем "дата" и еще один с именем "сумма"
Пользователь вводит даты транзакции в колонку "дата" и сумму, полученную в этот день, в колонку "сумма", это делается каждый день.
У меня также есть 3 поля со списком, в которых пользователь может выбрать год, месяц и неделю транзакции.
При выборе номера недели следует рассчитать общую сумму денег, заработанных за эту неделю.
Это код, который мне нужно внедрить в мою программу.
Я буду признателен за любую дополнительную помощь....
Richard MacCutchan
Затем вам нужно выбрать только те элементы, дата которых находится в пределах выбранной недели.
Member 14587396
Ты просто повторяешь мне мой вопрос.
Как мне это сделать в коде, пожалуйста?
Я действительно не могу понять, какие строки кода использовать
Richard MacCutchan
Нет, я не повторяю ваш вопрос. Я пытаюсь заставить вас понять, как найти правильные записи в ваших данных. Но поскольку я понятия не имею, как структурированы ваши данные или какие элементы они содержат, я не могу идти дальше.