VB数据库.报表问题,高手请进……

robin_xin_xin 2002-04-20 11:16:18
在VB中,如何才能动态的生成报表,打印报表?
我的接口是:ADO
数据库是SQL SERVER

急用,谢谢!
...全文
5 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
52694 2002-05-18
作个记号
回复
robin_xin_xin 2002-04-22
glite(zgq) ,nebular(星云)
谢谢你们提供的资料,你们帮了我的大忙,
真的很谢谢你们!
回复
glite 2002-04-20
有错,重写!
只能打印Datagrid
首先在报表设计器上放足够多的控件
1.在页标头中放足够多的Label(99个)
将页标头命名为 Head
以Label0.Label1.....Label99这样命名
2.在页细节中放足够多的Text(99个)
将页细节命名为 Bord
以Text0.Text1.....Text99这样命名

public Print_Custon(byval grid as datagrid,byval rs as adodb.recordset)
dim xs as double
dim countwidth as double
dim colwidth as double
dim i as long
dim j as long

for i = 0 to grid.columns.count - 1
countwidth =grid.columns(i).width +countwidth
next i
xs = countwidth /567/你的报表的宽度 '(把Datagrid的各个列的宽度累计并且换算成厘米,而xs则是你的datagrid和报表的比例)
with Report
for i = 0 to grid.columns.count-1
.section("Head").control("Label" & i).caption=grid.columns(i).caption
.section("Head").control("Label" & i).visible=grid.columns(i).visible
.section("Bord").control("Text" & i).visible=grid.columns(i).visible
if grid.columns(i).visible and grid.columns(i).width >0 then
'如果有未显示的列或列的宽度<0则不显示
j = i
.section("Head").control("Label" & i).left=colwidth
.section("Bord").control("Text" & i).left=colwidth
.section("Head").control("Label" & i).width=grid.columns(i).width / xs
.section("Bord").control("Text" & i).width=grid.columns(i).width / xs
.section("Bord").control("Text" & i).datafield=grid.columns(i).datafield
colwidth = colwidth +.section("Head").control("Label" & i).width
else
'如果有未显示的列或列的宽度<0则把它对应的TEXT的数据字段赋值为前面显示的列的数据字段
.section("Bord").control("Text" & i).datafield=grid.columns(j).datafield
end if

next i
for i = grid.columns.count to 99 把余下的LABEL和TEXT取消显示
.section("Head").control("Label" & i).visible=false
.section("Bord").control("Text" & i).visible=false
.section("Bord").control("Text" & i)).datafield=grid.columns(j).datafield
next i
set .datasource =rs
.show
end with
回复
glite 2002-04-20
只能打印Datagrid
首先在报表设计器上放足够多的控件
1.在页标头中放足够多的Label
将页标头命名为 Head
以Label0.Label1.....Label99这样命名
2.在页细节中放足够多的Text
将页细节命名为 Bord
以Text0.Text1.....Text99这样命名

public Print_Custon(byval grid as datagrid,byval rs as adodb.recordset)
dim xs as double
dim countwidth as double
dim colwidth as double
dim i as long
dim j as long

for i = 0 to grid.columns.count - 1
countwidth =grid.columns(i).width +countwidth
next i
xs = countwidth /567/你的报表的宽度 '(把Datagrid的各个列的宽度累计并且换算成厘米,而xs则是你的datagrid和报表的比例)
with Report
for i = 0 to grid.columns.count-1
.section("Head").control("Label" & i).caption=grid.columns(i).caption
.section("Head").control("Label" & i).visible=grid.columns(i).visible
.section("Bord").control("Text" & i).visible=grid.columns(i).visible
if grid.columns(i).visible and grid.columns(i).width >0 then
'如果有未显示的列或列的宽度<0则不显示
j = i
.section("Head").control("Label" & i).left=colwidth
.section("Bord").control("Text" & i).left=colwidth
.section("Head").control("Label" & i).width=grid.columns(i).width / xs
.section("Bord").control("Text" & i).width=grid.columns(i).width / xs
.section("Bord").control("Text" & i).datafield=grid.columns(i).datafield
colwidth = colwidth +.section("Head").control("Label" & i).width
else
'如果有未显示的列或列的宽度<0则把它对应的TEXT的数据字段赋值为前面显示的列的数据字段
.section("Bord").control("Text" & i).datafield=grid.columns(j).datafield
end if

next i
set .datasource =rs
.show
end with

回复
glite 2002-04-20
写一段代码给你
可能有部分错误,主要是记不住,因为在网吧
回复
nebular 2002-04-20
看你的动态要求是什么,如果比较复杂,就不要用DATAREPORT。
关于DATAREPORT,看看下面的贴了。
http://www.csdn.net/Expert/TopicView1.asp?id=656545
http://www.csdn.net/expert/topic/654/654745.xml?temp=.4889337
回复
daryl715 2002-04-20
关注
回复
pzt 2002-04-20
请高手指教 怎样把数据导入报表中
回复
发动态
发帖子

1180

社区成员

VB 数据库(包含打印,安装,报表)
申请成为版主
社区公告
暂无公告