Datareport打印报表的问题

CowmanKing 2008-10-29 10:25:19
请问诸位朋友:
Datareport可不可以如下打印报表:由于每次从数据库中查询出的字段数不是固定的,能否将这些字段交给Datareport来实现打印呢?如何实现之。
谢谢,期待朋友们的指教与答复。
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
CowmanKing 2008-10-29
  • 打赏
  • 举报
回复
嘿嘿,谢谢大哥。
过程里可能还会遇到别的问题,还望大哥多多指点,哈哈。
闪了,去仔细研读一下代码。
vbman2003 2008-10-29
  • 打赏
  • 举报
回复
大概如下:



Private Sub DataReport_Initialize()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim i As Integer
Dim mLeft As Long

cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False;" & _
"Data Source=" & App.Path & "\db1.mdb"
rs.Open "select * from tb1", cn, adOpenKeyset, adLockOptimistic
Set DataReport1.DataSource = rs
'以上部分是设置 DataReport 的数据源

Dim dTextCol As New Collection   '声明一个控件集合
Dim Ctl As Object

'根据情况,预先在报表上添加多个相关控件
'下面以RptTextBox控件为例

  '先将所有TextBox(RptTextBox) 控件绑定到随便某一字段
For Each Ctl In DataReport1.Sections.Item("Section1").Controls 
If TypeName(Ctl) = "RptTextBox" Then
Ctl.DataField = rs.Fields.Item(0).Name
dTextCol.Add Ctl
End If
Ctl.Visible = False
Next
  
  '循环记录集,重新绑定字段
For i = 0 To rs.Fields.Count - 1
With dTextCol.Item(i + 1)
.Visible = True
.DataField = rs.Fields.Item(i).Name
.Left = mLeft
mLeft = .Left + .Width
'控件定位。还有Width等等比较复杂,要根据具体情况写代码判断
End With
Next i
DataReport1.Sections.Item("Section1").Height = 400

End Sub

CowmanKing 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 vbman2003 的回复:]
可以啊,不过要写代码的话比较多...
思路就是事先将字段总数的控件添加在报表中,visible 设置为false,查询返回几个字段就显示几个控件,所有控件的定位等等属性都在代码中....
datarepart不支持动态加载控件,不然会简单许多...
[/Quote]
哈哈,谢谢大哥。
这回大哥那里有没有可以参考的代码啥的啊,我这只小水鸟能基本上听懂,但是不知道具体该怎么做?
vbman2003 2008-10-29
  • 打赏
  • 举报
回复
可以啊,不过要写代码的话比较多...
思路就是事先将字段总数的控件添加在报表中,visible 设置为false,查询返回几个字段就显示几个控件,所有控件的定位等等属性都在代码中....
datarepart不支持动态加载控件,不然会简单许多...

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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