DataGridView中没有合适的方法来冻结底部的合计行,这里用一种比较简单的方式实现。
1. 数据部分的DataGridView,不带任何滚动框
2.合计部分的DataGridView,带有横向滚动框
3.在画面上添加一个纵向滚动框
实现的主要思路就是用合计行的横向滚动框控制两个DataGridView的横向滚动,右侧的纵向滚动狂控制数据部分的DataGridView,效果看起来就是合计行始终显示。
该例实现了合计行的自动计算,取数据的部分是用程序做的DataTable
DataGridViewSumRow类
Public Class DataGridViewSumRowClass DataGridViewSumRow
Private dt As DataTable
Dim dtSum As DataTable
Private ROW_HEIGHT As Integer = 21 ''行高
Private Sub DataGridViewSumRow_Load()
Sub DataGridViewSumRow_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
VScrollBar1.Visible = False
End Sub
Private Sub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
dt = GetData()
Me.DataGridView1.DataSource = dt
Me.DataGridView1.RowTemplate.Height = ROW_HEIGHT
GetSumData()
''行数超过当前页显示时显示纵向滚动条
If dt.Rows.Count > 13 Then
VScrollBar1.Visible = True
''总长度为 (所有行数 - 画面一页显示行数) × 行高
VScrollBar1.Maximum = (Me.DataGridView1.Rows.Count - Me.DataGridView1.DisplayedRowCount(False)) * ROW_HEIGHT
VScrollBar1.Minimum = 0
VScrollBar1.SmallChange = 21