vb.net - 如何计算 Datagridview 上选定行中的金额 - VB.NET
问题描述
如何计算我的表中选定行的数量
我只想用 Printed = 'Y' 和 Receive = 'N' 的状态计算总金额
https://i.stack.imgur.com/iDqPE.png
这是我的代码,此代码只会计算列金额的总数
Dim rows As Integer = 0
Dim total_amount As Double
Try
Do Until rows = DataGridView1.RowCount
Dim AMOUNT = DataGridView1.Rows(rows).Cells(1).Value
total_amount = total_amount + AMOUNT
rows = rows + 1
Loop
Catch ex As Exception
End Try
lblAmount.Text = total_amount
Dim dblValue As Double = total_amount
lblTotalWithheld.Text = (dblValue.ToString("N",CultureInfo.InvariantCulture))
解决方案
如果你想为网格中的每一行做一些事情,然后遍历Rows
集合,例如
For Each row As DataGridViewRow In DataGridView1.Rows
'Use row here.
Next
如果你想为每个选定的行做一些事情,然后循环遍历SelectedRows
集合,例如
For Each row As DataGridViewRow In DataGridView1.SelectedRows
'Use row here.
Next
你说:
如何计算我的表中选定行的数量
但尚不清楚您的意思是在 UI 中选择还是在指定列中使用指定值。无论哪种方式,循环内的代码都是相同的:
If CStr(row.Cells(0).Value) = "Y" AndAlso CStr(row.Cells(1).Value) = "N" Then
Dim amount = CDbl(row.Cells(2).Value)
'Use amount here.
End If
我在那里使用了任意列索引,因此您应该根据需要更改它们。
编辑:
如果您的实际处理标准涉及数据的状态而不是 UI 的状态,那么您实际上根本不应该使用网格,而应该使用数据源。如果您还没有,您应该首先填充 a DataTable
,将其绑定到 aBindingSource
然后将其绑定到网格,例如
myDataAdapter.Fill(myDataTable)
myBindingSource.DataSource = myDataTable
myDataGridView.DataSource = myBindingSource
然后,您可以循环BindingSource
获取所需的数据,例如
Dim amount As Double = 0
For Each rowView As DataRowView In myBindingSource
If CStr(rowView("Printed")) = "Y" AndAlso
CStr(rowView("Receive")) = "N" Then
amount += CDbl(rowView("Amount"))
End If
Next
你甚至可以向它扔一些 LINQ:
Dim amount = myBindingSource.Cast(Of DataRowView)().
Where(Function(drv) CStr(drv("Printed")) = "Y" AndAlso
CStr(drv("Receive")) = "N").
Sum(Function(drv) CDbl(rowView("Amount")))
或者,在查询语法中:
Dim amount = (From drv As DataRowView In myBindingSource
Where CStr(drv("Printed")) = "Y" AndAlso
CStr(drv("Receive")) = "N")
Select CDbl(rowView("Amount"))).Sum()
但是,可能最简单的选择是使用 的Compute
方法DataTable
,例如
Dim amount = CDbl(myDataTable.Compute("SUM(Amount)",
"Printed = 'Y' AND Receive = 'N'")
推荐阅读
- c# - 如何从 Datarow.ItemArray 中删除一些列
- javascript - 如何使用反应在列表中应用过滤器
- php - 如何在 PHP 中使用 strtok?
- java - 随机平均数在 Java 中不起作用
- java - 在 Scene Builder 中加载 Jar 文件的问题
- python - 对每一行应用一个函数,其中函数使用 DataFrame 的所有先前行
- windows - Git 在 Windows 上检查具有 LF 行结尾的特定文件类型
- angular - 使用 Angular 自定义构建器进行资产修订
- c++ - For循环遍历所有值并在未找到变量时重复输入过程 - C++
- python-3.x - 如何在 Surprise 中拆分数据集和交叉验证?