如何在绑定Access的DataGridView最后一行添加列值总计(VB.NET)
在VB.NET中为DataGridView添加总计行的实现方案
嘿,我来帮你搞定这个需求!你在HTML里实现的总计行效果很直观,下面我给你两种实用的VB.NET实现方法,适配不同的场景:
方法一:修改绑定的DataTable(推荐,适合数据源绑定场景)
如果你是把Access数据库的数据填充到DataTable后绑定到DataGridView,那直接修改DataTable是最省心的——修改后DataGridView会自动同步显示:
步骤1:从Access获取并绑定数据
先把数据库里的数据读到DataTable,再绑定到控件:
' 替换成你的Access数据库路径和表名 Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\YourDatabase.accdb;" Dim dataTable As New DataTable() Using conn As New OleDbConnection(connString) Dim query As String = "SELECT Name, Data1, Data2 FROM YourTableName" Dim cmd As New OleDbCommand(query, conn) conn.Open() dataTable.Load(cmd.ExecuteReader()) End Using ' 绑定到DataGridView DataGridView1.DataSource = dataTable
步骤2:计算数值列的总和
用LINQ快速计算Data1和Data2列的总和:
Dim totalData1 As Integer = dataTable.AsEnumerable().Sum(Function(row) row.Field(Of Integer)("Data1")) Dim totalData2 As Integer = dataTable.AsEnumerable().Sum(Function(row) row.Field(Of Integer)("Data2"))
如果你的数值是小数类型,把Integer换成Decimal或者Double就行。
步骤3:添加总计行到DataTable
创建新行并填充总计值,再加入DataTable:
Dim totalRow As DataRow = dataTable.NewRow() totalRow("Name") = "Total" totalRow("Data1") = totalData1 totalRow("Data2") = totalData2 dataTable.Rows.Add(totalRow)
步骤4:设置总计行样式(和HTML效果一致)
给最后一行加灰色背景,在DataGridView的RowPostPaint事件里写代码:
Private Sub DataGridView1_RowPostPaint(sender As Object, e As DataGridViewRowPostPaintEventArgs) Handles DataGridView1.RowPostPaint ' 判断当前行是否是最后一行(总计行) If e.RowIndex = DataGridView1.Rows.Count - 1 Then DataGridView1.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightGray End If End Sub
方法二:直接在DataGridView中添加行(不修改原始数据源)
如果不想改动绑定的DataTable(比如不想把总计行保存回数据库),可以直接给DataGridView手动加一行:
步骤1:先绑定数据(和方法一的步骤1一样)
步骤2:遍历计算总和
Dim totalData1 As Integer = 0 Dim totalData2 As Integer = 0 For Each row As DataGridViewRow In DataGridView1.Rows ' 排除控件自带的空行(如果允许用户添加新行的话) If Not row.IsNewRow Then totalData1 += Convert.ToInt32(row.Cells("Data1").Value) totalData2 += Convert.ToInt32(row.Cells("Data2").Value) End If Next
步骤3:添加并设置总计行
' 添加新行 Dim rowIndex As Integer = DataGridView1.Rows.Add() Dim totalRow As DataGridViewRow = DataGridView1.Rows(rowIndex) ' 填充总计值 totalRow.Cells("Name").Value = "Total" totalRow.Cells("Data1").Value = totalData1 totalRow.Cells("Data2").Value = totalData2 ' 设置灰色背景 totalRow.DefaultCellStyle.BackColor = Color.LightGray
小提示
- 如果用户能编辑DataGridView里的数值,记得在
CellValueChanged事件里重新计算总和并更新总计行,确保数值实时同步。 - 如果你的列名或者数据类型不一样,记得对应调整代码里的字段名和类型哦。
内容的提问来源于stack exchange,提问作者Pradip Dhakal
相关产品推荐
相关产品推荐

