如何将一个动态生成的结果集传递给水晶报表

niccctvcom 2006-01-25 01:37:31
比如,一个用来统计的存储过程,生成一个统计结果集,内容是某天10个地区某种商品的销售量。
如下:
地区1 地区2 地区3 ... 地区10

100 60 50 ... 40

现在想用水晶报表生成柱状图,x轴为地区,y轴为销售量。

不想用水晶报表里的公式,因为还有其他更复杂的统计,都是用存储过程实现的。

好像在设计时如果不指定字段的话就无法插入图表,但是统计的结果是动态生成的,字段也是变化的,
怎么做?
...全文
513 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqbirch 2006-05-29
  • 打赏
  • 举报
回复
可以先把数据集的xml schema保存下来,然后用这个文件在crystal report里面制作图表(因为数据结构已经在xml schema里面了);当然,你要在图表运行时候把具体的数据加载上。
CreaTive1911 2006-05-27
  • 打赏
  • 举报
回复
如果只是结果是动态,那还好办, 
如果连表结构都是动态的, 那还真不好办了。
wyp0623 2006-05-24
  • 打赏
  • 举报
回复
偶也想知道哦,帮顶
ami_glacier 2006-02-20
  • 打赏
  • 举报
回复
参看

http://babyt.cnblogs.com/archive/2005/03/13/118097.html
天开之想 2006-02-10
  • 打赏
  • 举报
回复
那你可以自己动态创建datatable然后把报表数据源设成datatable,当然你要创建一个最终的强数据类型,以存放你动态创建的datatable.
我的一段代码,和你的问题差不多
'打印某班级各课程名的出勤率
' MessageBox.Show("班级" & InStr(coursetiaojian, "stufirstclass"))
'构建交叉表

Dim str1 As String
str1 = "select cuscoursename as 课程名,sum(case custype when '迟到' then 1 else 0 end) as 迟到,sum(case custype when '早退' then 1 else 0 end) as 早退,sum(case custype when '旷课' then 1 else 0 end) as 旷课,sum(case custype when '请假' then 1 else 0 end) as 请假,sum(case custype when '无违纪' then 1 else 0 end) as 无违纪 from course " & coursetiaojian & " group by cuscoursename "
Dim conn As New OleDbConnection(glinkstring)
Dim da As OleDbDataAdapter
Dim ds As New DataSet
Try

conn.Open()
da = New OleDbDataAdapter(str1, conn)
' MessageBox.Show(str1)
da.Fill(ds, "jiaochabiao")
'MessageBox.Show("ok")
da.Dispose()
conn.Dispose()
Catch ex As Exception
conn.Dispose()
MessageBox.Show(Err.Description)
End Try


'构建最终数据表

Dim tb As New DataTable("ketang")
Dim col As New DataColumn("chuqinlv")
col.DataType = System.Type.GetType("System.Decimal")
tb.Columns.Add(col)
col = New DataColumn("coursename")
tb.Columns.Add(col)

'处理交叉表中的数据,填充到最终数据表中
Dim ttb As New DataTable
ttb = ds.Tables("jiaochabiao")
Dim i As Integer, j As Single = 0.0
Dim x As Integer, y As Integer
For i = 0 To ttb.Rows.Count - 1
x = ttb.Rows(i).Item("旷课") + ttb.Rows(i).Item("请假")
y = ttb.Rows(i).Item("迟到") + ttb.Rows(i).Item("旷课") + ttb.Rows(i).Item("请假") + ttb.Rows(i).Item("早退") + ttb.Rows(i).Item("无违纪")

j = (y - x) / y
Dim r As DataRow
r = tb.NewRow
r.Item(1) = ttb.Rows(i).Item(0)
' MessageBox.Show(j)
r.Item(0) = j
tb.Rows.Add(r)
Next





Dim coursename As New jitireport1

'coursename.SetDataSource(tb)
'打开报表窗体
Dim viewer As New jitireport1
viewer.Show()
' MessageBox.Show("ok")
viewer.initereports(tb, ds)

End If

----------------------------------------------------------------------
注意:这里我建了一个命名为ketang的强数据集里面的字段有chuqinlv 和 coursename
七强 2006-02-08
  • 打赏
  • 举报
回复
关注一下。。



====CSDN 小助手 V2.5 2005年11月05日发布====
CSDN小助手是一款脱离浏览器也可以访问Csdn论坛的软件
界面:http://blog.csdn.net/Qqwwee_Com/archive/2005/11/05/523395.aspx
下载:http://szlawbook.com/csdnv2

惊喜
无偿送域名(K i l l J a p a n e s e.com),请联系QQ32528568
先到先得。2005年11月21日 21:29分开始。

hejunpeng 2006-02-07
  • 打赏
  • 举报
回复
与楼上同病,如何把自己动态构造的数据集绑定到水晶报表呀?谢谢
lee_wei 2006-01-26
  • 打赏
  • 举报
回复
同样关注中...

4,819

社区成员

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

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