关于子报表的问题,实在是没辙了。求救

lvminghua001 2011-01-06 03:58:38
题目有点罗嗦,具体情况是这样的:
用的工具是vs2008(vb),sql2005,还有vs自带的水晶报表
sql建了两个表:表一、表二
表一结构:
日期 产量 单位
2010-9-1 100 一部
2010-9-2 122 二部
2010-9-3 133 三部
2010-9-4 144 一部
……
而表二的结构为
日期时间 事故数量 单位
2010-9-1 00:1:12 1 一部
2010-9-1 05:4:43 1 二部
2010-9-2 07:2:43 1 三部
2010-9-2 03:6:43 1 四部
……
vs做了个查询表二记录的窗体,查询的内容包括某段时间内发生的事故,或者是某个单位内发生的事故,或者是两者的组合查询,并将结果显示在里面的datagridview1,以上都已经实现了,现在的问题是:
想用水晶报表做一个显示结果的报表,然后用子报表(或者不管什么方法吧,总之能实现)显示这段时间内(这个单位)的产量。
上回说的不是很明白,还是个新手,请高手赐教!
...全文
149 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvminghua001 2011-01-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 luols 的回复:]
你先把两个表的数据用SQL合并起来

SQL code

--> SQL查询
select T1.年月,T1.单位,产量,事故数量 from
(select convert(varchar(7), 日期, 120) as 年月,单位,sum(产量) as 产量 from t1
group by convert(varchar(7), 日期, 120),单位) T1
left jo……
[/Quote]
好的,谢谢你啦!我的问题解决了!多谢多谢!
阿双2009 2011-01-11
  • 打赏
  • 举报
回复
你先把两个表的数据用SQL合并起来

--> SQL查询
select T1.年月,T1.单位,产量,事故数量 from
(select convert(varchar(7), 日期, 120) as 年月,单位,sum(产量) as 产量 from t1
group by convert(varchar(7), 日期, 120),单位) T1
left join --这边连接看你t1,t2表的数据情况
(select convert(varchar(7), 日期时间, 120) as 年月,单位,sum(事故数量) as 事故数量 from t2
group by convert(varchar(7), 日期时间, 120),单位) T2
on T1.年月=T2.年月 and T1.单位=T2.单位

然后把这四列数据传给水晶报表,用交叉表处理,你可以先参考下我之前写的这篇:水晶报表交叉表 基础篇
lvminghua001 2011-01-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 luols 的回复:]
那你的DataSet1里应该有一个放有7列的DataTable吧,我这边假定该DataTable为DataTable1,注意这里每列的列名要和查询结果列名一致,比如我的查询结果列名是:

月份 一部产量 一部事故数量 ……

所以DataTable1的列名也应该是 月份,一部产量,一部事故数量……数据类型可以用字符串(默认就是)
然后进入关键代码段:

VB.NET code

……
[/Quote]
这样写的话会不会让同月不同年的记录汇总了呢?
实际上这个表里的部门很多啊,这样写会不会很……让人头疼呢?还有就是我还得做一个关于值班经理的汇总,就是想查这个经理值班期间内产量多少,事故多少,这样就涉及跨表查询了吧?这方面我是一点能力没了
不好意思,想问的问题还有一大堆啊……而且好不容易碰到个帮忙的
阿双2009 2011-01-07
  • 打赏
  • 举报
回复
能否把你现在与水晶报表相关代码段贴出来看看?
lvminghua001 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sid2008 的回复:]
既然查詢都已經實現了。
那麽報表應該也可以做出來了吧?

直接用你查詢的那個SQL語句作爲數據源綁定,然後在報表裏面畫界面不就可以了麽?
[/Quote]
就是这个问题啊,不知道怎么搞的,我的水晶报表里面就是调试出错,把查询的结果中最后一条数据显示n遍,要么直接啥都没有……
阿双2009 2011-01-07
  • 打赏
  • 举报
回复
那你的DataSet1里应该有一个放有7列的DataTable吧,我这边假定该DataTable为DataTable1,注意这里每列的列名要和查询结果列名一致,比如我的查询结果列名是:

月份 一部产量 一部事故数量 ……

所以DataTable1的列名也应该是 月份,一部产量,一部事故数量……数据类型可以用字符串(默认就是)
然后进入关键代码段:

Dim ds1 As New DataSet1
Dim hostName As String = System.Net.Dns.GetHostName()
Dim ConnString As String = "Data Source=" + hostName + ";Initial Catalog=系统;" + "Integrated Security=True;Pooling=False"
Dim conn As New SqlConnection(ConnString)
Dim strSQL As String = _
"select T1.月份,一部产量,一部事故数量,二部产量,二部事故数量,三部产量,三部事故数量" + _
"from (" + _
"select Month(日期) as 月份," + _
"sum(case 单位 when '一部' then 产量 else 0 end) 一部产量," + _
"sum(case 单位 when '二部' then 产量 else 0 end) 二部产量," + _
"sum(case 单位 when '三部' then 产量 else 0 end) 三部产量 " + _
"from t1 group by Month(日期)) T1,(" + _
"select Month(日期时间) as 月份," + _
"sum(case 单位 when '一部' then 事故数量 else 0 end) 一部事故数量," + _
"sum(case 单位 when '二部' then 事故数量 else 0 end) 二部事故数量," + _
"sum(case 单位 when '三部' then 事故数量 else 0 end) 三部事故数量 " + _
"from t2 group by Month(日期时间)) T2 where T1.月份=T2.月份" 'SQL查询

Dim da As New SqlDataAdapter(strSQL, conn)
da.Fill(ds1.DataTable1) '填充到数据集DataSet1,也就是水晶报表“骨架”
Dim myReport As New CrystalReport1
myReport.SetDataSource(ds1)
CrystalReportViewer1.ReportSource = myReport
lvminghua001 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luols 的回复:]
我在你之前这个帖子http://topic.csdn.net/u/20110105/16/f64825fe-4223-4459-a606-a84919a1f744.html用SQL获得了查询结果,是你需求的结果吗?
[/Quote]
对啊,就是这样的,我就想显示这么个结果啊,不过在vs里怎么办啊
阿双2009 2011-01-07
  • 打赏
  • 举报
回复
我在你之前这个帖子http://topic.csdn.net/u/20110105/16/f64825fe-4223-4459-a606-a84919a1f744.html用SQL获得了查询结果,是你需求的结果吗?
lvminghua001 2011-01-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 luols 的回复:]
能否把你现在与水晶报表相关代码段贴出来看看?
[/Quote]
惭愧,惭愧啊,到目前为止,我基本上都是用图形化界面实现的,刚刚试着用push的方法做了点:
数据集dataset1里我建了俩跟数据库里面的两个表结构一样的表 t1 和t2,
Dim ds1 As New DataSet1
Dim da As New SqlDataAdapter
fwq = System.Net.Dns.GetHostName().ToString()
sjk = "Data Source=" + fwq + ";Initial Catalog=系统;" + "Integrated Security=True;Pooling=False"
conn = New SqlConnection(sjk) '连接数据库
ztj1 = "select * from t1 where 1=1"'查询的条件 ,按照用户的选定的条件还能进行添加
ztj = "select * from t2 where 1=1"
da = New SqlDataAdapter(ztj1, conn)
da.Fill(ds1, "t1")
da = New SqlDataAdapter(ztj, conn)
da.Fill(ds1, "t2")
CrystalReportViewer1.Visible = True
Dim cst As New CrystalReport1
cst.SetDataSource(ds1)
CrystalReportViewer1.ReportSource = cst

我想把两个表里的一些字段放到CrystalReport1一起显示,当然,由于记录数不同只能显示一个统计的结果,于是我想按照单位和日期分组,字段有t1中的产量总计、t2中的事故总计,但是最后运行起来报表里啥都没有。那个郁闷啊……
笨熊熊 2011-01-06
  • 打赏
  • 举报
回复
既然查詢都已經實現了。
那麽報表應該也可以做出來了吧?

直接用你查詢的那個SQL語句作爲數據源綁定,然後在報表裏面畫界面不就可以了麽?

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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