DataGridView实现添加合计行并始终显示在底部

时间:2024-05-20 21:14:10
DataGridView中没有合适的方法来冻结底部的合计行,这里用一种比较简单的方式实现。
1.数据部分的DataGridView,不带任何滚动框
2.合计部分的DataGridView,带有横向滚动框
3.在画面上添加一个纵向滚动框
实现的主要思路就是用合计行的横向滚动框控制两个DataGridView的横向滚动,右侧的纵向滚动狂控制数据部分的DataGridView,效果看起来就是合计行始终显示。

该例实现了合计行的自动计算,取数据的部分是用程序做的DataTable

DataGridViewSumRow类
DataGridView实现添加合计行并始终显示在底部PublicClassDataGridViewSumRow
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
PrivatedtAsDataTable
DataGridView实现添加合计行并始终显示在底部
DimdtSumAsDataTable
DataGridView实现添加合计行并始终显示在底部
PrivateROW_HEIGHTAsInteger=21''行高
DataGridView实现添加合计行并始终显示在底部

DataGridView实现添加合计行并始终显示在底部
PrivateSubDataGridViewSumRow_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.Load
DataGridView实现添加合计行并始终显示在底部VScrollBar1.Visible
=False
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部dt
=GetData()
DataGridView实现添加合计行并始终显示在底部
Me.DataGridView1.DataSource=dt
DataGridView实现添加合计行并始终显示在底部
Me.DataGridView1.RowTemplate.Height=ROW_HEIGHT
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部GetSumData()
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
''行数超过当前页显示时显示纵向滚动条
DataGridView实现添加合计行并始终显示在底部
Ifdt.Rows.Count>13Then
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部VScrollBar1.Visible
=True
DataGridView实现添加合计行并始终显示在底部
''总长度为(所有行数-画面一页显示行数)×行高
DataGridView实现添加合计行并始终显示在底部
VScrollBar1.Maximum=(Me.DataGridView1.Rows.Count-Me.DataGridView1.DisplayedRowCount(False))*ROW_HEIGHT
DataGridView实现添加合计行并始终显示在底部VScrollBar1.Minimum
=0
DataGridView实现添加合计行并始终显示在底部VScrollBar1.SmallChange
=21
DataGridView实现添加合计行并始终显示在底部VScrollBar1.LargeChange
=50
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
EndIf
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
'''<summary>
DataGridView实现添加合计行并始终显示在底部
'''合计取得设定
DataGridView实现添加合计行并始终显示在底部
'''</summary>
DataGridView实现添加合计行并始终显示在底部
'''<remarks></remarks>
DataGridView实现添加合计行并始终显示在底部

DataGridView实现添加合计行并始终显示在底部
PrivateSubGetSumData()
DataGridView实现添加合计行并始终显示在底部
DimdrAsDataRow
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部dtSum
=NewDataTable("TEST")
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部dtSum
=dt.Clone
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
DimrdmAsRandom=NewRandom
DataGridView实现添加合计行并始终显示在底部dr
=dtSum.NewRow()
DataGridView实现添加合计行并始终显示在底部dr(
0)="合计"
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
ForiAsInteger=1Todt.Columns.Count-1
DataGridView实现添加合计行并始终显示在底部dr(i)
=dt.Compute("Sum("+dt.Columns(i).ColumnName+")","true")
DataGridView实现添加合计行并始终显示在底部
Next
DataGridView实现添加合计行并始终显示在底部dtSum.Rows.Add(dr)
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
Me.DataGridViewSum.DataSource=dtSum
DataGridView实现添加合计行并始终显示在底部
Me.DataGridViewSum.Rows(0).DefaultCellStyle.BackColor=Color.Brown
DataGridView实现添加合计行并始终显示在底部
Me.DataGridViewSum.ReadOnly=True
DataGridView实现添加合计行并始终显示在底部
Me.DataGridViewSum.SelectionMode=DataGridViewSelectionMode.FullRowSelect
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
'''<summary>
DataGridView实现添加合计行并始终显示在底部
'''数据取得
DataGridView实现添加合计行并始终显示在底部
'''</summary>
DataGridView实现添加合计行并始终显示在底部
'''<returns></returns>
DataGridView实现添加合计行并始终显示在底部
'''<remarks></remarks>
DataGridView实现添加合计行并始终显示在底部

DataGridView实现添加合计行并始终显示在底部
PublicFunctionGetData()AsDataTable
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
DimdtAsDataTable
DataGridView实现添加合计行并始终显示在底部
DimdrAsDataRow
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部dt
=NewDataTable("TEST")
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("号码",GetType(String)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量1",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量2",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量3",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量4",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量5",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量6",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量7",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量8",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部dt.Columns.Add(
NewDataColumn("数量9",GetType(Integer)))
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
DimrdmAsRandom=NewRandom
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
ForiAsInteger=10To80
DataGridView实现添加合计行并始终显示在底部dr
=dt.NewRow()
DataGridView实现添加合计行并始终显示在底部dr(
0)="00"&i.ToString
DataGridView实现添加合计行并始终显示在底部
ForjAsInteger=1To9
DataGridView实现添加合计行并始终显示在底部dr(j)
=rdm.Next(1000,5000)
DataGridView实现添加合计行并始终显示在底部
Next
DataGridView实现添加合计行并始终显示在底部dt.Rows.Add(dr)
DataGridView实现添加合计行并始终显示在底部
Next
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
Returndt
DataGridView实现添加合计行并始终显示在底部
EndFunction

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
'''<summary>
DataGridView实现添加合计行并始终显示在底部
'''纵滚动条事件
DataGridView实现添加合计行并始终显示在底部
'''</summary>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="sender"></param>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="e"></param>
DataGridView实现添加合计行并始终显示在底部
'''<remarks></remarks>
DataGridView实现添加合计行并始终显示在底部
PrivateSubVScrollBar1_Scroll(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.ScrollEventArgs)HandlesVScrollBar1.Scroll
DataGridView实现添加合计行并始终显示在底部
'Debug.WriteLine(e.NewValue.ToString)
DataGridView实现添加合计行并始终显示在底部
Me.DataGridView1.FirstDisplayedScrollingRowIndex=e.NewValueROW_HEIGHT
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
DataGridView实现添加合计行并始终显示在底部
Me.Close()
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
'''<summary>
DataGridView实现添加合计行并始终显示在底部
'''合计DataGridView的滚动条事件
DataGridView实现添加合计行并始终显示在底部
'''</summary>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="sender"></param>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="e"></param>
DataGridView实现添加合计行并始终显示在底部
'''<remarks></remarks>
DataGridView实现添加合计行并始终显示在底部

DataGridView实现添加合计行并始终显示在底部
PrivateSubDataGridViewSum_Scroll(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.ScrollEventArgs)HandlesDataGridViewSum.Scroll
DataGridView实现添加合计行并始终显示在底部
Me.DataGridView1.HorizontalScrollingOffset=e.NewValue
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
'''<summary>
DataGridView实现添加合计行并始终显示在底部
'''数据变更后重新合计
DataGridView实现添加合计行并始终显示在底部
'''</summary>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="sender"></param>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="e"></param>
DataGridView实现添加合计行并始终显示在底部
'''<remarks></remarks>
DataGridView实现添加合计行并始终显示在底部
PrivateSubDataGridView1_CellValueChanged(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.DataGridViewCellEventArgs)HandlesDataGridView1.CellValueChanged
DataGridView实现添加合计行并始终显示在底部
Ife.ColumnIndex<=0Then
DataGridView实现添加合计行并始终显示在底部
ExitSub
DataGridView实现添加合计行并始终显示在底部
EndIf
DataGridView实现添加合计行并始终显示在底部
''DetaGridView中数据变化后重新合计
DataGridView实现添加合计行并始终显示在底部
Me.DataGridViewSum(e.ColumnIndex,0).Value=dt.Compute("Sum("+dt.Columns(e.ColumnIndex).ColumnName+")","true")
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
'''<summary>
DataGridView实现添加合计行并始终显示在底部
'''响应鼠标滚轴事件
DataGridView实现添加合计行并始终显示在底部
'''</summary>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="sender"></param>
DataGridView实现添加合计行并始终显示在底部
'''<paramname="e"></param>
DataGridView实现添加合计行并始终显示在底部
'''<remarks></remarks>
DataGridView实现添加合计行并始终显示在底部
PrivateSubDataGridViewSumRow_MouseWheel(ByValsenderAsObject,ByValeAsSystem.Windows.Forms.MouseEventArgs)HandlesMe.MouseWheel
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
IfVScrollBar1.Visible=FalseThen
DataGridView实现添加合计行并始终显示在底部
ExitSub
DataGridView实现添加合计行并始终显示在底部
EndIf
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
IfVScrollBar1.Value-ROW_HEIGHT<0Ande.Delta>0Then
DataGridView实现添加合计行并始终显示在底部VScrollBar1.Value
=VScrollBar1.Minimum
DataGridView实现添加合计行并始终显示在底部
ExitSub
DataGridView实现添加合计行并始终显示在底部
EndIf
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
IfVScrollBar1.Value+ROW_HEIGHT>VScrollBar1.MaximumAnde.Delta<0Then
DataGridView实现添加合计行并始终显示在底部VScrollBar1.Value
=VScrollBar1.Maximum
DataGridView实现添加合计行并始终显示在底部
ExitSub
DataGridView实现添加合计行并始终显示在底部
EndIf
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
Try
DataGridView实现添加合计行并始终显示在底部VScrollBar1.Value
-=CInt(e.Delta/Math.Abs(e.Delta)*ROW_HEIGHT)
DataGridView实现添加合计行并始终显示在底部
CatchexAsException
DataGridView实现添加合计行并始终显示在底部Debug.WriteLine(
"###########################")
DataGridView实现添加合计行并始终显示在底部Debug.WriteLine(
"VScrollBar1.Value="&VScrollBar1.Value)
DataGridView实现添加合计行并始终显示在底部Debug.WriteLine(
"e.Delta="&e.Delta)
DataGridView实现添加合计行并始终显示在底部Debug.WriteLine(
"###########################")
DataGridView实现添加合计行并始终显示在底部
EndTry
DataGridView实现添加合计行并始终显示在底部
Me.DataGridView1.FirstDisplayedScrollingRowIndex=VScrollBar1.ValueROW_HEIGHT
DataGridView实现添加合计行并始终显示在底部
DataGridView实现添加合计行并始终显示在底部
EndSub

DataGridView实现添加合计行并始终显示在底部
EndClass

效果如下
DataGridView实现添加合计行并始终显示在底部