Member 14587396 Ответов: 2

Как рассчитать доход, полученный за выбранную неделю из combobox?


У меня есть Income Datagridview с двумя столбцами, датой и доходом.
Когда пользователь выбирает месяц и неделю из поля со списком, я хочу, чтобы была рассчитана общая сумма дохода, полученного за выбранную неделю.
Мой рабочий день начинается с воскресенья.

У меня есть код ниже, который я пробовал, но он делает что-то еще, он вычисляет общее количество доходов в столбце дохода Datagridview.
Я-абсолютный новичок в программировании.

Что я уже пробовал:

Дим-целое число
Для каждой строки в виде Datagridview в dgvIncome.rows
если грести. ячейки(3).Значение>0 тогда
сумма=сумма+строка. ячейки (3).Значение
следующий

Ralf Meier

.. затем вы должны сравнить каждую строку, если ячейка(1).значение (я не знаю, правильная ли это ячейка) совпадает с вашим выбором ...

Member 14587396

Вот что я попробовал сделать дальше...
...
Дим-сам как двойной
Для каждой строки как DatagridviewRow в dgvIncome. Строки
Если бы не dgvIncome.IsNewRow Тогда
Если dgvIncome. Ячейки("Дата").Значение=cbxWeek. Элемент Тогда
сумма=сумма+dgvIncome. Клетки("Количество").Ценность
Конец, Если
...
Но, похоже, он все еще не выполняет свою работу.

2 Ответов

Рейтинг:
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

написано очень мелкими буквами :
Я полагаю, что исследователь не поймет, что вы имеете в виду ...

Maciej Los

Посмотрим. ;)

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

Нет, я не повторяю ваш вопрос. Я пытаюсь заставить вас понять, как найти правильные записи в ваших данных. Но поскольку я понятия не имею, как структурированы ваши данные или какие элементы они содержат, я не могу идти дальше.