vb.net datagridview中添加汇总行

comeby 2009-12-28 09:02:56
在网上查了相关资料,发现这个功能是要能实现在,而且效果也比较不错,但大多是开发好的控件,没有源码。真心请教一下各位大侠该如何实现该功能?谢谢!
因为本人较笨,所以请各位解答时能说的详细一点,拒绝一、两句话的敷衍!
...全文
1262 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
学习到老死 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wplpss 的回复:]
引用 15 楼 woaimm123 的回复:
我也遇到过同样问题,最简单的办法就是在datagridview下手动添加textbox,把textbox外观设置跟单元格一样,每次填充表格的时候顺便赋值给textbox。不用考虑排序等诸多问题了。

关键的问题是横向滚动条左右移动时,合计行随不随着动,因为lz要求的是合计行在横向滚动条上方。
[/Quote]
那就只能编程方法在通过在datatable里插入行来插入dv里了
在每次填充datatable以后,计算出总计后再用上面说到的row。add插入汇总行。
这样显示没问题了,但是排序会有问题。
解决办法是在排序事件中添加重新填充datatable的方法,
用编程的方式实现排序。
comeby 2009-12-29
  • 打赏
  • 举报
回复
用row.add?可是无法固定显示
用wplpss的两个datagridview的方法,显示汇总的datagridview位置不好调
谢谢大家的帮助!谢谢wplpss十分感谢!
wplpss 2009-12-29
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 jnxunjie 的回复:]
将查询明细结果填充至DBSET 然后使用DBSET新增行,并将查询汇总数据写入,然后绑定至DATAGRIDVIEW
[/Quote]
你举个例子可以吗?
俺尽力了:(
jnxunjie 2009-12-29
  • 打赏
  • 举报
回复
是dataset里
wplpss 2009-12-28
  • 打赏
  • 举报
回复
你写的码我看了,现在想问你,你想用哪种方法?
另外,这是实际项目还是学校里的作业?
comeby 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wplpss 的回复:]
方法一:用两个datagridview来实现,第一个用来正常显示明细数据的。
        第二个仅设为一行,数据源绑定另外一个表,这个表只有一行,就是那个汇总行。
方法二:用一个datagridview,一个datatable,datatable在取得明细数据后,对明细数据进行汇总,
        最后增加到datatable里面。
另外,要源码的话,起码应该把你定义的变量名,控件名列出来。你的具体环境什么都不给,写了代码,
也跟你的环境不匹配。

[/Quote]
用两个datagridview,用什么方法能设置成像一个dagagridview?
hurtsobad 2009-12-28
  • 打赏
  • 举报
回复
顶一下
十八道胡同 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lcl_data 的回复:]
给你的source添加一行,用for循环的发放把列植汇总起来,在绑定
[/Quote]
代码你搜索一下以前的帖子,我记得我写过,
lqd122508706 2009-12-28
  • 打赏
  • 举报
回复
同意2楼的兄弟的看法,在一个datagridview里面实现不好,因为如果title位置要实现排序的话,就会比较麻烦,还是用两个来实现叫现实点。这个问题应该可以结贴了。
十八道胡同 2009-12-28
  • 打赏
  • 举报
回复
给你的source添加一行,用for循环的发放把列植汇总起来,在绑定
comeby 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wplpss 的回复:]
方法一:用两个datagridview来实现,第一个用来正常显示明细数据的。
        第二个仅设为一行,数据源绑定另外一个表,这个表只有一行,就是那个汇总行。
方法二:用一个datagridview,一个datatable,datatable在取得明细数据后,对明细数据进行汇总,
        最后增加到datatable里面。
另外,要源码的话,起码应该把你定义的变量名,控件名列出来。你的具体环境什么都不给,写了代码,
也跟你的环境不匹配。

[/Quote]

这是我的源码,写的比较烂哦,不知道你能看懂不,添麻烦了!
另:我在网上找一个别人做的控件,可以实现这个功能,还可以求平均值等,他的合计栏在Datagridview的底部,但滚动条在合计栏的底部,不知道是不是也用了你的第一个方法?
Public Class Form5
Dim comm As String
Private Sub Form5_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Datagridview1.Height = Me.Height - 50
Datagridview1.Width = Me.Width - 30

commsz()

Dim sqlada As New SqlClient.SqlDataAdapter("select rq,swdj,qymc,ssxq,ssfj," + comm + " from z_data where rq = '" + Dialog1.rq + "' and swdj = '" + Form6.swdj + "' and qymc = '" + Form6.qymc + "' and ssxq = '" + Form6.ssxq + "' and ssfj = '" + Form6.ssfj + "' ", Dialog1.rs)
Dim ds As New DataSet
ds.Clear()
sqlada.Fill(ds)
Datagridview1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken
Datagridview1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Sunken
Datagridview1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
Datagridview1.DataSource = ds.Tables(0)

Datagridview1.Columns(0).HeaderText = "日期"
Datagridview1.Columns(1).HeaderText = "税务登记"
Datagridview1.Columns(2).HeaderText = "企业名称"
Datagridview1.Columns(3).HeaderText = "所属辖区"
Datagridview1.Columns(4).HeaderText = "所属分局"
If Datagridview1.Rows.Count > 0 Then
Datagridview1.Columns(4).Frozen = True
End If
End Sub
Private Sub commsz()
'-------------------------从jb_szxx中查询税种信息添加到comm字符串中
Dim sql As New SqlClient.SqlDataAdapter("select id,szmc from jb_szxx order by id ", Dialog1.rs)
Dim rs As New DataSet
rs.Clear()
sql.Fill(rs)
Dim sl As Integer
sl = rs.Tables(0).Rows.Count - 1

Dim a As String()
ReDim a(sl)

For sl = 0 To rs.Tables(0).Rows.Count - 1
a(sl) = rs.Tables(0).Rows(sl)(1).ToString

Next

'Dim comm As String
For sl = 0 To rs.Tables(0).Rows.Count - 2

comm &= "" + a(sl) + ","

Next
comm = comm & "" + a(rs.Tables(0).Rows.Count - 1) + ""
'-----------------------结束
End Sub
Private Sub Datagridview1_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles Data1.CellPainting

If e.ColumnIndex < 0 And e.RowIndex >= 0 Then

e.Paint(e.ClipBounds, DataGridViewPaintParts.All)

Dim indexRect As Rectangle = e.CellBounds
indexRect.Inflate(-2, -2)

TextRenderer.DrawText(e.Graphics, _
(e.RowIndex + 1).ToString(), _
e.CellStyle.Font, _
indexRect, _
e.CellStyle.ForeColor, _
TextFormatFlags.Right Or TextFormatFlags.VerticalCenter)

e.Handled = True
End If

End Sub

End Class
lrjt1980 2009-12-28
  • 打赏
  • 举报
回复
我感觉这是一条sql语句。
wplpss 2009-12-28
  • 打赏
  • 举报
回复
方法一:用两个datagridview来实现,第一个用来正常显示明细数据的。
第二个仅设为一行,数据源绑定另外一个表,这个表只有一行,就是那个汇总行。
方法二:用一个datagridview,一个datatable,datatable在取得明细数据后,对明细数据进行汇总,
最后增加到datatable里面。
另外,要源码的话,起码应该把你定义的变量名,控件名列出来。你的具体环境什么都不给,写了代码,
也跟你的环境不匹配。
silentwins 2009-12-28
  • 打赏
  • 举报
回复
1.在数据源添加一行,个人觉得不太好
2.在Footer添加统计控件统计数据
3.代码没有
jnxunjie 2009-12-28
  • 打赏
  • 举报
回复
将查询明细结果填充至DBSET 然后使用DBSET新增行,并将查询汇总数据写入,然后绑定至DATAGRIDVIEW
yagebu1983 2009-12-28
  • 打赏
  • 举报
回复
用SQL语句,算出数据,把它绑定的Footer上
comeby 2009-12-28
  • 打赏
  • 举报
回复
移动横向滚动条时,合计行也随着移动,但移动纵向滚动条时,合计行始终处于底部(横向滚动栏的上方)
谢谢!
wplpss 2009-12-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 woaimm123 的回复:]
我也遇到过同样问题,最简单的办法就是在datagridview下手动添加textbox,把textbox外观设置跟单元格一样,每次填充表格的时候顺便赋值给textbox。不用考虑排序等诸多问题了。
[/Quote]
关键的问题是横向滚动条左右移动时,合计行随不随着动,因为lz要求的是合计行在横向滚动条上方。
学习到老死 2009-12-28
  • 打赏
  • 举报
回复
我也遇到过同样问题,最简单的办法就是在datagridview下手动添加textbox,把textbox外观设置跟单元格一样,每次填充表格的时候顺便赋值给textbox。不用考虑排序等诸多问题了。
silentwins 2009-12-28
  • 打赏
  • 举报
回复
Source加行,排序起来就头痛了...
加载更多回复(3)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧