DataGridView 数据行合(和)并

lgx1972 2009-06-27 01:17:35
DataGridView数据表如下:

姓名 部门 工资 奖金
-----------------------------
张三 业务部 2200 300
李四 资源部 3100 200
王五 工 会 2800 100
赵六 财务部 3300 500
张三 业务部 1000 100
马七 工程部 3300 300
王五 工 会 1200 300
------------------------------

想要合并后的结果如下:

姓名 部门 工资 奖金
-----------------------------
张三 业务部 3200 400
李四 资源部 3100 200
王五 工 会 4000 400
赵六 财务部 3300 500
马七 工程部 3300 300
------------------------------


即:把姓名和部门相同某人的工资奖金求和,并删除原数据行

那么该功能的VB.Net代码该怎么写呢?
...全文
55 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
longgun0 2009-06-30
  • 打赏
  • 举报
回复
为什么不用数据库?用xml也好呀.处理这些问题很方便.
如果一定要用数组的话,应该在数组里完成合计,而不要datagridview里.
具体做法,可以定义一个临时数组,计算完合计之后,再赋值给datagridview.但是这个方法仍然是个笨办法.最好的办法是用数据库呀.
兄弟,为什么不用数据库呢?
lgx1972 2009-06-30
  • 打赏
  • 举报
回复
继续等!
sytsyt0329 2009-06-30
  • 打赏
  • 举报
回复
已实现,测试成功,本想附上程序运行后截图,但不知怎么发,只好发代码了!希望用完立即给分,本人急需。谢谢!
假设你原来的数据是存在名为:DataGridView1的控件里且已经有数据,那么转换后的数据会显示在DataGridView2控件里(DataGridView2控件不要进行任何设置,拖入窗口进行,切记!!!),Button1按钮按下后即可完成转换,具体实现如下(Copy后即可运行):
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dt As New DataTable
For Each col As DataGridViewColumn In DataGridView1.Columns
dt.Columns.Add(col.HeaderText, System.Type.GetType("System.String"))
Next

Dim tmpList As New List(Of String)
For Each row As DataGridViewRow In DataGridView1.Rows
If row.Cells(0).Value Is Nothing Then Exit For
If tmpList.Contains(row.Cells(0).Value) = False Then tmpList.Add(row.Cells(0).Value)
Next

For Each s As String In tmpList
Dim dr As DataRow
dr = dt.NewRow
dr.Item(0) = s
dr.Item(1) = 0
dr.Item(2) = 0
dr.Item(3) = 0
dt.Rows.Add(dr)
Next

For i As Integer = 0 To dt.Rows.Count - 1
For Each row As DataGridViewRow In DataGridView1.Rows
If dt.Rows(i).Item(0) = row.Cells(0).Value Then
dt.Rows(i).Item(1) = row.Cells(1).Value
dt.Rows(i).Item(2) = Val(row.Cells(2).Value) + Val(dt.Rows(i).Item(2))
dt.Rows(i).Item(3) = Val(row.Cells(3).Value) + Val(dt.Rows(i).Item(3))
End If
Next
Next

DataGridView2.DataSource = dt
End Sub
想飞的狼 2009-06-28
  • 打赏
  • 举报
回复
这个问题可以用SQL解决啊,
select 姓名,部门,sum(工资),sum(奖金) from table group by 姓名,部门

然后在用datagridview加载就可以了
lgx1972 2009-06-28
  • 打赏
  • 举报
回复
看来VB版组里没有高手了
高手都在C#\C++版里了!
lgx1972 2009-06-28
  • 打赏
  • 举报
回复
楼上的还是没有明白我的意思
各位:
我的DataGridView的数据源是数组,不是数据库!
是数据库还不简单,我自然会的.

我也不想把数组转换成数据库来操作,因为那样程序运行速度会变慢.
sytsyt0329 2009-06-27
  • 打赏
  • 举报
回复
很简单,有点忙,等一有空,贴出代码给你!注意关注
lgx1972 2009-06-27
  • 打赏
  • 举报
回复
难道我要“无满意结贴”吗?太遗憾了!
lgx1972 2009-06-27
  • 打赏
  • 举报
回复
楼上说的不还是查询数据源的数据库方法嘛
我这个表格的内容来源于自定义类型数组,所以数据源是数组
数组也可以使用SQL语句查询吗(VB2008中的LINQ是可以查询数组的,但我使用的是VB2005)?

继续期待真正的高手…………
rockyvan 2009-06-27
  • 打赏
  • 举报
回复

--從數據源處理方便點
SELECT [姓名], [部门], [工资] = SUM(ISNULL([工资]),0), [奖金] = SUM(ISNULL([奖金]),0)
FROM [YOURTABLENAME]
GROUP BY [姓名], [部门]




tyb1222 2009-06-27
  • 打赏
  • 举报
回复
你写sql的时候就可以实现你说的功能了..
你select 的时候做个group by 名字字段..
lgx1972 2009-06-27
  • 打赏
  • 举报
回复
我当然是不想用数据库的方法来处理的
期待高手……
appleller 2009-06-27
  • 打赏
  • 举报
回复
在数据库里处理很方便啊

16,554

社区成员

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

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