怎样访问datareport对象中的对象,vb的打印技术如何

lllqe 2002-05-17 10:11:43
如在datareport中怎样访问rptlabel,
怎样用ado为datareport配置一个数据源
...全文
3986 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihonggen0 2002-05-17
  • 打赏
  • 举报
回复
创建一个简单数据报表


本主题创建了一个简单数据报表,该报表使用数据环境设计器作为数据源。数据环境设计器使用和 Visual Basic一起提供的 NorthWind 数据库创建一个简单的层次结构游标。该游标包含两个表,Customers 和 Orders,并使用“CustomerID”字段链接两个表。完成的报表类似于下面的插图。

简单数据报表:客户的订单日期



在开始逐步处理之前,确保计算机上存在 Northwind 数据库(Nwind.mdb)。如果不存在,从 Visual Basic CD 复制一份文件到计算机的硬盘上。

要在数据环境设计器中创建一个简单的层次结构游标,请按照下列步骤执行:

创建一个新的“标准 EXE”工程。


在“工程”菜单上,单击“添加 Data Enviroment”向工程中添加一个设计器。如果设计器没有在“工程”菜单上列出,则单击“部件”。单击“设计器”选项卡。并单击“数据环境”把设计器添加到菜单上。
注意 最初为项目加载的四种ActiveX设计器在“工程”菜单上列出。如果加载了超过四个设计器,后面的设计器可以从“工程”菜单的“更多 ActiveX 设计器”子菜单中获得。

在“数据链接属性”对话框上单击“Microsoft Jet 3.51 OLE DB Provider”,这是为访问 Jet 数据库选择正确的 OLE DB 供应商。


单击“下一步”按钮进入“连接”选项卡。


单击第一个文本框旁边的省略按钮(…)。


用“选择 Access 数据库”对话框浏览到 nwind.mdb 文件,它被安装在 Program Files\Microsoft Visual Studio\Vb98 目录下。


单击“确定”关闭对话框。


右键单击“Connection1”图标,单击“重命名”,把图标名改为“Northwind”。


右键单击“Northwind”图标,然后单击“添加命令”显示“Command1”对话框。在对话框中,如下所示设置属性: 属性 设置值
Command Name Customers
Connection Northwind
DataBase Object Table
Object Name Customers


单击“确定”结束对话框。


右键单击“Customers”命令,并单击“添加子命令”显示“Command2”对话框。在对话框中,如下所示设置属性: 属性 设置值
Command Name Orders
Connection Northwind
DataBase Object Table
Object Name Orders


单击“关联”选项卡。应该选中“与父命令对象相关联”复选框。“父”框应该包含“Customers”;“父字段”和“子字段/参数”框都应该包含“CustomerID”。
在设计关系数据库时,对于链接字段,习惯上相关的表要使用相同的名字。在这种情况下,链接字段都被命名为 CustomerID。数据环境设计器自动地在对话框中匹配这样的对。

单击“添加”。单击“确定”关闭对话框。
单击“添加”按钮向 Command 对象添加关系。在关闭了对话框之后,数据环境设计器通过把两个命令显示为一个层次结构来反映关系。该层次结构将被用于创建数据报表。

根据下面的设置值设置工程和设计器的属性,然后保存工程: 对象 属性 设置值
Project Name PrjNwind
DataEnvironment Name DeNwind
Form Name FrmShowReport


创建数据报表
一旦创建了数据环境设计器,就可以创建一个数据报表。因为并不是数据环境中所有的字段在一个数据报表中都有用,这一系列的主题创建一个受限制的报表,只显示几个字段。

要创建一个新的数据报表,请按照下列步骤执行:

在“工程”菜单上,单击“添加 Data Report”,Visual Basic 将把它添加到您的工程中。如果设计器不在“工程”菜单上,单击“部件”。单击“设计器”选项卡,并单击“Data Report”把设计器添加到菜单上。
注意 为工程加载的前四种 ActiveX 设计器在“工程”菜单上列出。如果加载了多于四个设计器,后面的设计器可以从“工程”菜单的“更多 ActiveX 设计器”子菜单中获得。

根据下面的表设置 DataReport 对象的属性: 属性 设置值
Name rptNwind
Caption Northwind Data Report

在“属性”窗口上,单击“数据源”,然后单击“deNwind”。然后单击“DataMember”并单击“Customers”。
重点 要把 DataSource 属性设置为 deNwind,数据环境设计器必须为打开的。如果数据环境设计器是关闭的,按下 CTRL+R 键显示“工程”窗口,然后双击数据环境图标。

右键单击数据报表设计器,并单击“检索结构”。
您已经向设计器添加了一个新的分组。每一个分组都同数据环境中的 Command 对象有“一对一”对应关系;在这种情况下,新的分组与客户的 Command 对象相对应。同时也要注意分组标头有一个与之匹配的分组注脚部分。

注意 如果某个 Command 对象有多于一个的子对象 — 相互“平行”的子 Command 对象,则 Data Environment 使您可以创建该 Command 对象的层次结构。Data Report 设计器,却没有那么灵活,在同一时间不能显示多于一个的子对象。此时,当执行一个 Retrieve Structure Command命令时,Data Report 将只显示第一个子 command,其他的都不显示。所以,您应该避免创建带有“平行”子 command的 Command 层次结构。

从数据环境设计器,把“CompanyName”字段(在“Customers”命令下)拖到分组标头(Customers_Header)部分。
分组标头部分可以包含 Customers 命令的任何字段,然而,出于演示目的,此时只显示 Customer 名。

删除名为“Label1”的 Label 控件(rptLabel)。
如果不希望 Label 控件包括在 TextBox 控件中,可以在数据环境设计器的“选项...”对话框的“字段映射”选项卡上撤消对“Drag and Drop Fields Caption”选项的选择。

从数据环境设计器中,把“OrderDate”字段(在Orders命令下)拖到细节(Orders_Detail)部分。删除Label控件。
细节部分表示最内层的“重复”部分,因而与数据环境层次结构(OrdersCommand对象)中最底层的 Command 对象相对应。

重新调整数据环境设计器部分的大小,使之与下面的插图类似:


重新调整细节部分的高度,使它尽可能的矮是很重要的,因为高度将会与为每一个 CompanyName 返回的 OrderDate 相乘。OrderDate 文本框下面或上面的任何多余位置将在最后的报表中导致不必要的空间。

保存工程。
使用 Show 方法预览数据报表
既然数据环境和 Data Report 对象已经创建,就几乎准备好运行工程了。还剩下一步:写代码以显示数据报表。

要在运行时显示数据报表,请按照下列步骤执行:

在“工程资源管理器”窗口上,双击“frmShowReport”图标,显示窗体设计器。


在“工具箱”上,单击“通用”选项卡。
当把一个数据报表设计器添加到工程时,数据报表设计器的控件被添加到名为“Data Report”的选项卡上。要使用标准的 Visual Basic 控件,必须切换到“通用”选项卡。

单击“CommandButton”图标并在窗体上绘制一个“CommandButton”。


根据下面的表设置 Command1 控件的属性: 属性 设置值
Name CmdShow
Caption Show Report


在按钮的 Click 事件中,粘贴下面的代码。
Private Sub cmdShow_Click()
rptNwind.Show
End Sub
保存并运行工程。


单击“显示报表”,在打印预览方式中显示报表。
可选的—将数据报表作为启动对象设置
在没有代码的情况下,也可以显示报表。

在“工程”菜单上,单击“prjNwind”属性。


在“启动对象”框中,选择“rptNwind”。


保存并运行工程。
注意 如果使用这种方法,可以从工程中把Form对象删除。

步骤
该主题是帮助您创建一个示例数据报表的一系列步骤中的一部分:

要 请参阅
进行下一步 扩展数据报表

lihonggen0 2002-05-17
  • 打赏
  • 举报
回复
DataReport 对象


DataReport对象是一个可编程对象,代表数据报表设计器(Data Report designer)。

语法

DataReport

说明

Data Report使用数据库中的记录生成报表。要使用它:

配置一个数据源,例如Microsoft数据环境,以访问数据库。


设定DataReport对象的DataSource属性为数据源。


设定DataReport对象的DataMember属性为数据成员。


右键单击设计器,并单击“检索结构”。


向相应的节添加相应的控件。


为每一个控件设定DataMember和DataField属性。


运行时,使用Show方法显示数据报表。
使用DataReport对象通过更改每一Section对象的布局,来编程改变数据报表的外观和行为。

数据报表设计器还有使用ExportReport方法导出报表的功能。这一方法允许从ExportFormats集合中指定一个ExportFormat对象,以用作报表的模板。
数据报表部分


数据报表设计器由如下对象组成:

DataReport 对象—与 Visual Basic 窗体类似,DataReport 对象同时具有一个可视的设计器和一个代码模块。可以使用设计器创建报表的布局。也可以向设计器的代码模块添加代码,以采用编程方式调整设计器中包含的控件或部分的格式。


Section 对象—数据报表设计器的每一个部分由 Sections 集合中的一个 Section 对象表示。设计时,每一部分由一个可以单击以选择页的标头和可以放置和定位控件的窗格表示。可以使用对象及其属性在报表生成之前对其进行动态重新配置。


Data Report 控件—仅包含可在数据报表设计器上工作的特殊控件。(注意:不能在数据报表设计器上使用 Visual Basic 的内部控件或任何 ActiveX 控件)。这些控件可以在Visual Basic Toolbox中找到,但是它们被放置在一个独立的名为“数据报表”的选项卡上。
数据报表设计器的部分
缺省的数据报表设计器包含如下这些部分:

报表标头—包含显示在一个报表开始处的文本,例如报表标题、作者或数据库名。如果想把报表标头作为报表的第一页,设置它的 ForcePageBreak 属性为 rptPageBreakAfter。


页标头—包含在每一页顶部出现的信息,例如报表的标题。


分组标头/注脚—包含数据报表的一个“重复”部分。每一个分组标头与一个分组注脚相匹配。标头和注脚对与数据环境设计器中的一个单独的 Command 对象相关联。


细节—包含报表的最内部的“重复”部分(记录)。详细部分与数据环境层次结构中最低层的 Command 对象相关联。


页注脚—包含在每一页底部出现的信息,例如页数。


报表注脚—包含报表结束处出现的文本,例如摘要信息或一个地址或联系人姓名。报表注脚出现在最后一个页标头和页注脚之间。
数据报表控件
当一个新的数据报表设计器被添加到一个工程时,下列控件将自动地被放置在名为DataReport的“工具箱”选项卡中:

TextBox 控件(RptTextBox)—允许规定文本格式,或指定一个 DataFormat。


Label 控件(RptLabel)—允许在报表上放置标签、标识字段或部分。


Image 控件(RptImage)—使用户能在报表上放置图形。注意,该控件不能被绑定到数据字段。


Line 控件(RptLine)—使用户能在报表上绘制标尺,以进一步区分部分。


Shape 控件(RptShape)—使用户能在报表上放置矩形、三角形或圆形(椭圆型)。


Function 控件(RptFunction)—一个特殊的文本框,报表生成时计算数值。
lihonggen0 2002-05-17
  • 打赏
  • 举报
回复
Private Sub sscmdOK_Click(Index As Integer)
Dim sqlprint As String

If SSOption1(0).Value = False Then
sqlprint = "SELECT * FROM J_Pctzd_sp WHERE PCDH='" & Trim(W_J_Pctzd.Text1(2).Text) & "' order by id"
ReportPrint "com_J_Pctzd_sp", sqlprint, Dr_J_Pctzd1
Call TaoPrint(Dr_J_Pctzd1, nPrintMode)
Rs_J_Pctzd.MoveFirst
Rs_J_Pctzd.Find "PCDH='" & Trim(W_J_Pctzd.Text1(2).Text) & "'"
If Not Rs_J_Pctzd.EOF Then
Dr_J_Pctzd1.Sections(2).Controls("label2").Caption = Rs_J_Pctzd.Fields("scdw") & ""
Dr_J_Pctzd1.Sections(2).Controls("label3").Caption = Rs_J_Pctzd.Fields("contract") & ""
Dr_J_Pctzd1.Sections(2).Controls("label4").Caption = Rs_J_Pctzd.Fields("pcdh") & ""
Dr_J_Pctzd1.Sections(5).Controls("label6").Caption = Rs_J_Pctzd.Fields("jhq") & ""
Dr_J_Pctzd1.Sections(5).Controls("label7").Caption = Rs_J_Pctzd.Fields("baoz") & ""
Dr_J_Pctzd1.Sections(5).Controls("label8").Caption = Rs_J_Pctzd.Fields("beiz") & ""
Dr_J_Pctzd1.Sections(5).Controls("label25").Caption = Rs_J_Pctzd.Fields("staffname") & ""
Dr_J_Pctzd1.Sections(5).Controls("label26").Caption = Rs_J_Pctzd.Fields("rq") & ""
End If
If cDeptCode = 17 Then
Dr_J_Pctzd1.Sections(2).Controls("label1").Caption = "单 位"
Dr_J_Pctzd1.Sections(3).Controls("Text8").DataField = "sldw"
Dr_J_Pctzd1.Sections(5).Controls("image1").Visible = True
Dr_J_Pctzd1.Sections(5).Controls("image2").Visible = True
Else
Dr_J_Pctzd1.Sections(5).Controls("image1").Visible = False
Dr_J_Pctzd1.Sections(5).Controls("image2").Visible = False
End If
Dr_J_Pctzd1.Show 1
Else
sqlprint = "SELECT * FROM J_Pctzd WHERE PCDH='" & Trim(W_J_Pctzd.Text1(2).Text) & "'"
If cDeptCode <> "16" Then
ReportPrint "com_J_Pctzd", sqlprint, Dr_J_Pctzd
Call TaoPrint(Dr_J_Pctzd, nPrintMode)
If cDeptCode = "17" Then
Dr_J_Pctzd.Sections(2).Controls("image1").Visible = True
Dr_J_Pctzd.Sections(2).Controls("image2").Visible = True
Else
Dr_J_Pctzd.Sections(2).Controls("image1").Visible = False
Dr_J_Pctzd.Sections(2).Controls("image2").Visible = False
End If
Dr_J_Pctzd.Show 1
Else
ReportPrint "com_J_Pctzd", sqlprint, Dr_J_Pctzd2
Call TaoPrint(Dr_J_Pctzd2, nPrintMode)
Dr_J_Pctzd2.Sections(2).Controls("image1").Visible = False
Dr_J_Pctzd2.Sections(2).Controls("image2").Visible = False
Dr_J_Pctzd2.Show 1
End If
End If
DE_Report.Con_report.Close
OpenDEConnection
Unload Me
End Sub

zhangxf2000 2002-05-17
  • 打赏
  • 举报
回复
datareport1.sections("section名").control("控件名").caption =
datareport1.sections("section名").control("控件名").text =
nebular 2002-05-17
  • 打赏
  • 举报
回复
呵呵,谢谢bamboo_leo(竹子) 纠正我的笔误。
具体可以看我以前的贴子
http://www.csdn.net/Expert/TopicView1.asp?id=654745
bamboo_leo 2002-05-17
  • 打赏
  • 举报
回复
同意 nebular(星云)
但是control应改为Controls
另外,Sections中的值为控件所在的Section名称或索引
nebular 2002-05-17
  • 打赏
  • 举报
回复
dim rsRpt as new adodb.recordset
rsrpt.open ....
datareport1.sections("section2").control("rptlabel1").caption="111"
set datareport1.datasource=rsRpt

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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