请问winform中,怎么把2个表的内容合并导出excel?

qq_34859304 2017-11-24 04:12:18
tab1是主表
tab2是明细表
两个表都有字段orderno,通过字段 orderno关联

打开winform窗口,默认加载tab1的内容,导出excel,使用的是NPOI组件,导出主表tab1正常(默认用的是datagridview来显示tab1),现在的问题是,怎么把tab2的明细内容,合并导出呢?


大概示意如下:

winform
tab1 (dgv1)
id orderno customername price saletime

……


默认不显示tab2,鼠标移动到dgv1里面的orderno,传值,显示一个隐藏的dgv2,在dgv2里面加载关联的销售明细

现在只能导出显示tab1的dgv1,用什么办法可以同时它每一个订单号关联的销售明细呢?

...全文
457 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 13 楼 qq_34859304 的回复:
sqlite 算了,我还是按照那个没合并的来导出吧,多谢兄弟! [quote=引用 12 楼 qq_37170555 的回复:] [quote=引用 9 楼 qq_34859304 的回复:] 简单说就是:导出能实现合并相同内容的单元格吗?

use Tempdb
go
--> --> 听雨停了-->测试数据
 
if not object_id(N'Tempdb..#tab') is null
	drop table #tab
Go
Create table #tab([OrderNo] nvarchar(23),[其他字段...] nvarchar(23),[商品] nvarchar(22),[数量] int)
Insert #tab
select N'001',N'...',N'苹果',10 union all
select N'001',N'...',N'李子',10 union all
select N'001',N'...',N'香蕉',10
--测试数据结束
WITH cte AS (
         SELECT *,
                ROW_NUMBER() OVER(PARTITION BY orderno ORDER BY orderno) AS rn
         FROM   #tab
     )

SELECT CASE rn
            WHEN 1 THEN orderno
            ELSE NULL
       END AS orderno,
       CASE rn
            WHEN 1 THEN [其他字段...]
            ELSE NULL
       END AS [其他字段...],
       商品,
       数量
FROM cte    
用sql查询大概可以这样做,达到你说的需求,然后把查询结果导出execl文件[/quote][/quote] 其实我觉得吧没合并的导出来还更好看,你这合并后不觉得看上去有点空虚啊
qq_34859304 2017-11-24
  • 打赏
  • 举报
回复
sqlite 算了,我还是按照那个没合并的来导出吧,多谢兄弟!
引用 12 楼 qq_37170555 的回复:
[quote=引用 9 楼 qq_34859304 的回复:] 简单说就是:导出能实现合并相同内容的单元格吗?

use Tempdb
go
--> --> 听雨停了-->测试数据
 
if not object_id(N'Tempdb..#tab') is null
	drop table #tab
Go
Create table #tab([OrderNo] nvarchar(23),[其他字段...] nvarchar(23),[商品] nvarchar(22),[数量] int)
Insert #tab
select N'001',N'...',N'苹果',10 union all
select N'001',N'...',N'李子',10 union all
select N'001',N'...',N'香蕉',10
--测试数据结束
WITH cte AS (
         SELECT *,
                ROW_NUMBER() OVER(PARTITION BY orderno ORDER BY orderno) AS rn
         FROM   #tab
     )

SELECT CASE rn
            WHEN 1 THEN orderno
            ELSE NULL
       END AS orderno,
       CASE rn
            WHEN 1 THEN [其他字段...]
            ELSE NULL
       END AS [其他字段...],
       商品,
       数量
FROM cte    
用sql查询大概可以这样做,达到你说的需求,然后把查询结果导出execl文件[/quote]
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 9 楼 qq_34859304 的回复:
简单说就是:导出能实现合并相同内容的单元格吗?


use Tempdb
go
--> --> 听雨停了-->测试数据

if not object_id(N'Tempdb..#tab') is null
drop table #tab
Go
Create table #tab([OrderNo] nvarchar(23),[其他字段...] nvarchar(23),[商品] nvarchar(22),[数量] int)
Insert #tab
select N'001',N'...',N'苹果',10 union all
select N'001',N'...',N'李子',10 union all
select N'001',N'...',N'香蕉',10
--测试数据结束
WITH cte AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY orderno ORDER BY orderno) AS rn
FROM #tab
)

SELECT CASE rn
WHEN 1 THEN orderno
ELSE NULL
END AS orderno,
CASE rn
WHEN 1 THEN [其他字段...]
ELSE NULL
END AS [其他字段...],
商品,
数量
FROM cte


用sql查询大概可以这样做,达到你说的需求,然后把查询结果导出execl文件
qq_34859304 2017-11-24
  • 打赏
  • 举报
回复
我现在加了一个代码,就是在dgv1里面,指定相同订单号的合并,显示的时候可以了。但是导出候,又没合并了,有点小晕
引用 10 楼 qq_37170555 的回复:
[quote=引用 6 楼 qq_34859304 的回复:] [quote=引用 4 楼 qq_37170555 的回复:] [quote=引用 2 楼 qq_34859304 的回复:] [quote=引用 1 楼 qq_37170555 的回复:] 有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?[/quote] 你的意思是说查询两个表后,会变成下面这样是吗

--主表					--明细表
OrderNo	其他字段...		OrderNo	商品	数量
001		...			    001		苹果	10
001		...			    001		李子	10
001		...				001		香蕉	10
你是希望前面主表的数据不要重复的出现在execl里是吗?如果是的话那你希望他导出来成什么样的格式啊[/quote] 如果可以合并也行的,比如合并成 : 订单号 商品名 1 苹果 香蕉 梨子 可以不在窗口中显示,点击导出excel的时候,把订单号合并可以吗? 我用的是NPOI导出excel[/quote] 你这样在窗口显示不觉得丑啊,我建议你还是直接后台查询出来导出,前台还是跟你现在这样显示比较。 导出后合并相同单元格好像没有这个功能。[/quote]
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 6 楼 qq_34859304 的回复:
[quote=引用 4 楼 qq_37170555 的回复:] [quote=引用 2 楼 qq_34859304 的回复:] [quote=引用 1 楼 qq_37170555 的回复:] 有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?[/quote] 你的意思是说查询两个表后,会变成下面这样是吗

--主表					--明细表
OrderNo	其他字段...		OrderNo	商品	数量
001		...			    001		苹果	10
001		...			    001		李子	10
001		...				001		香蕉	10
你是希望前面主表的数据不要重复的出现在execl里是吗?如果是的话那你希望他导出来成什么样的格式啊[/quote] 如果可以合并也行的,比如合并成 : 订单号 商品名 1 苹果 香蕉 梨子 可以不在窗口中显示,点击导出excel的时候,把订单号合并可以吗? 我用的是NPOI导出excel[/quote] 你这样在窗口显示不觉得丑啊,我建议你还是直接后台查询出来导出,前台还是跟你现在这样显示比较。 导出后合并相同单元格好像没有这个功能。
qq_34859304 2017-11-24
  • 打赏
  • 举报
回复
简单说就是:导出能实现合并相同内容的单元格吗?
qq_34859304 2017-11-24
  • 打赏
  • 举报
回复
如果可以合并最好,导出后实现这样的: 订单号 商品名 1 苹果 香蕉 梨子
引用 7 楼 qq_37170555 的回复:
[quote=引用 5 楼 qq_34859304 的回复:] 嗯,是的呢 订单号 商品名称(实际是明细表tab2的内容) 1 苹果 1 香蕉 1 梨子 [quote=引用 4 楼 qq_37170555 的回复:] [quote=引用 2 楼 qq_34859304 的回复:] [quote=引用 1 楼 qq_37170555 的回复:] 有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?[/quote] 你的意思是说查询两个表后,会变成下面这样是吗

--主表					--明细表
OrderNo	其他字段...		OrderNo	商品	数量
001		...			    001		苹果	10
001		...			    001		李子	10
001		...				001		香蕉	10
你是希望前面主表的数据不要重复的出现在execl里是吗?如果是的话那你希望他导出来成什么样的格式啊[/quote][/quote] 那你希望两个表导出execl后成什么格式嘛。正常主明细连接就是上面的效果啊[/quote]
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 5 楼 qq_34859304 的回复:
嗯,是的呢 订单号 商品名称(实际是明细表tab2的内容) 1 苹果 1 香蕉 1 梨子 [quote=引用 4 楼 qq_37170555 的回复:] [quote=引用 2 楼 qq_34859304 的回复:] [quote=引用 1 楼 qq_37170555 的回复:] 有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?[/quote] 你的意思是说查询两个表后,会变成下面这样是吗

--主表					--明细表
OrderNo	其他字段...		OrderNo	商品	数量
001		...			    001		苹果	10
001		...			    001		李子	10
001		...				001		香蕉	10
你是希望前面主表的数据不要重复的出现在execl里是吗?如果是的话那你希望他导出来成什么样的格式啊[/quote][/quote] 那你希望两个表导出execl后成什么格式嘛。正常主明细连接就是上面的效果啊
qq_34859304 2017-11-24
  • 打赏
  • 举报
回复
引用 4 楼 qq_37170555 的回复:
[quote=引用 2 楼 qq_34859304 的回复:] [quote=引用 1 楼 qq_37170555 的回复:] 有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?[/quote] 你的意思是说查询两个表后,会变成下面这样是吗

--主表					--明细表
OrderNo	其他字段...		OrderNo	商品	数量
001		...			    001		苹果	10
001		...			    001		李子	10
001		...				001		香蕉	10
你是希望前面主表的数据不要重复的出现在execl里是吗?如果是的话那你希望他导出来成什么样的格式啊[/quote] 如果可以合并也行的,比如合并成 : 订单号 商品名 1 苹果 香蕉 梨子 可以不在窗口中显示,点击导出excel的时候,把订单号合并可以吗? 我用的是NPOI导出excel
qq_34859304 2017-11-24
  • 打赏
  • 举报
回复
嗯,是的呢 订单号 商品名称(实际是明细表tab2的内容) 1 苹果 1 香蕉 1 梨子
引用 4 楼 qq_37170555 的回复:
[quote=引用 2 楼 qq_34859304 的回复:] [quote=引用 1 楼 qq_37170555 的回复:] 有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?[/quote] 你的意思是说查询两个表后,会变成下面这样是吗

--主表					--明细表
OrderNo	其他字段...		OrderNo	商品	数量
001		...			    001		苹果	10
001		...			    001		李子	10
001		...				001		香蕉	10
你是希望前面主表的数据不要重复的出现在execl里是吗?如果是的话那你希望他导出来成什么样的格式啊[/quote]
exception92 2017-11-24
  • 打赏
  • 举报
回复
把两个表的数据合并成一个表的导出即可。
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
引用 2 楼 qq_34859304 的回复:
[quote=引用 1 楼 qq_37170555 的回复:] 有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?[/quote] 你的意思是说查询两个表后,会变成下面这样是吗

--主表					--明细表
OrderNo	其他字段...		OrderNo	商品	数量
001		...			    001		苹果	10
001		...			    001		李子	10
001		...				001		香蕉	10
你是希望前面主表的数据不要重复的出现在execl里是吗?如果是的话那你希望他导出来成什么样的格式啊
qq_34859304 2017-11-24
  • 打赏
  • 举报
回复
引用 1 楼 qq_37170555 的回复:
有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集
我用内联查询,可以,但是好像tab1的记录就重复了,可以避免它重复不?
听雨停了 2017-11-24
  • 打赏
  • 举报
回复
有个建议不知道行不行啊,就是当你点击导出按钮的时候触发一个事件,时间就是从数据库查询这两个表的数据,然后导出。也就是实际你导出的不是datagridview里显示的内容,而是你两表查询出来的结果集

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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