首页 | IT新闻 | 硬件 | 操作系统 | 开发 | 网络编程 | 数据库 | 热门框架 | 网络安全 | 组网 | 建站指南 | 网页制作 | 特效 | 实用技巧 | 服务器 | 办公 | QQ | 探索 | 社区
|
VB6.0开发技巧之数据报表使用技巧
vb 6.0专业版和企业版中的数据报表设计器与数据环境设计器是数据访问的新内容。msdn 所提供的prjnwind.vbp 示例工程在设计阶段(design time)就已将dataenvironment设为datareport的数据源,并将打印格式也设好,这种做法不太利于程序的通用性。当然,我们也可以对dataenvironment编程,在运行阶段(run time)控制数据源。其实,datareport可以完全脱离dataenvironment,而打印由动态sql生成的recordset。 实现代码如下: private sub datareport_initialize() … dim adoconnectionx as new adodb.connection dim adorecordsetx as new adodb.recordset adoconnectionx.open″provider=microsoft.jet.oledb.3.51;persist security info=false;data source=″ & app.path & ″\xxx.mdb″ adorecordsetx.open ″select * from表名″, adoconnectionx set datareportx.datasource = adorecordsetx ′设置 datareport 的数据源 … 由vb 6 所提供的datareport.sections.item(index).controls.item(index)...这样的语法不太利于编程控制数据报表设计器的专用控件的位置、大小等各种属性。但是,我们可以编程根据控件所在区域(section)和所属类别等将它们分成若干集合(collection),然后通过控制集合的元素来控制其所代表的控件。当然,在设计阶段我们要将足够多的控件绘制到datareport上备用。实现的主要部分代码如下: … ′根据控件所在区域(section)和所属类别分集合(collection) dim rhsec4—rptlbl—collection as new collection … ′页标头(pageheader)区域 shape(rptshape) 控件集合 dim phsec2—rptshp—collection as new collection … ′细节(detail)区域 textbox(rpttextbox) 控件集合 dim dsec1—rpttxt—collection as new collection … dim ctl as object … for each ctl in me.sections.item(″section1″).controls ′section1 select case typename(ctl) case ″rptlabel″ dsec1—rptlbl—collection.add ctl ctl.caption = ″" case ″rptshape″ dsec1—rptshp—collection.add ctl case ″rpttextbox″ ctl.datafield = adorecordset.fields.item(0).name ′先将所有textbox(rpttextbox) 控件绑定到某一字段,否则报错! dsec1—rpttxt—collection.add ctl end select ctl.visible = false next ctl … ′以下通过控制集合的元素来准确有效的控制这些元素所代表的控件。 dim i as integer dim bfmt as stddataformat ′定义布尔(boolean)型字段的数据格式 set bfmt = new stddataformat bfmt.type = fmtboolean bfmt.truevalue = ″是″ bfmt.falsevalue = ″否″ for i = 0 to 5 ′只打印前几个字段,shape(rptshape) 控件用来显示单元格,页标头(pageheader)区域:显示列表头(caption) with phsec2—rptshp—collection.item(i + 1) ′单元格 .visible = true if i = 0 then .left = 0 else .left = phsec2—rptshp—collection.item(i).left + phsec2—rptshp—collection.item(i).width end if .top = 0 .height = 400 ′可根据字体设 单位:缇字体的高度(单位:缇)可使用 form、picturebox 的textheight 方法或 api 获得 .width = 1500 ′这里可根据实际情况用数组分别设置各列的列宽 end with with phsec2—rptlbl—collection.item(i + 1) ′列表头标题(caption) .left = phsec2—rptshp—collection.item(i + 1).left + 100 .top = phsec2—rptshp—collection.item(i + 1).top + 100 .height = phsec2—rptshp—collection.item(i + 1).height - 180 .width = phsec2—rptshp—collection.item(i + 1).width - 200 .caption = adorecordsetx.fields.item(i).name .alignment = rptjustifycenter .visible = true end with ′细节(detail)区域显示: with dsec1—rptshp—collection.item(i + 1) ′单元格 if i = 0 then dsec1—rptshp—collection.item(i + 1).left = 0 else .left = dsec1—rptshp—collection.item(i).left + dsec1—rptshp—collection.item(i).width end if .top = 0 .height = phsec2—rptshp—collection.item(i + 1).height .width = phsec2—rptshp—collection.item(i + 1).width .visible = true end with with dsec1—rpttxt—collection.item(i + 1) ′数据 .height = dsec1—rptshp—collection.item(i + 1).height - 180 .left = dsec1—rptshp—collection.item(i + 1).left + 100 .top = dsec1—rptshp—collection.item(i + 1).top + 100 .width = dsec1—rptshp—collection.item(i + 1).width - 200 .datafield = adorecordsetx.fields.item(i).name ′重新绑定字段 select case adorecordsetx.fields.item(i).type ′可根据字段数据类型设置数据格式 case adbigint, adinteger, adsmallint .dataformat.format = ″###,##0″ ′数字 .alignment = rptjustifyright case adboolean set .dataformat = bfmt ′布尔型字段设为自定义格式 .alignment = rptjustifycenter case adcurrency .dataformat.format = ″###,##0.00″ ′货币 .alignment = rptjustifyright case addate, addbdate, addbtimestamp .dataformat.format = ″long date″ ′日期、时间 .alignment = rptjustifyright case else ′其它,如:文本等 .alignment = rptjustifyleft end select .visible = true end with next i datareport1.sections.item(″section2″).height = 400 datareport1.sections.item(″section1″).height = 400 … end sub 该方案在pwin 9.x 和vb 6.0下通过。 如果要打印分级(层)recordset ,还要在datareport 上增加分组标头和分组注脚区等,并根据控件的具体功能、用途为其定义各类控件集合,设计出更复杂的报表。 相关链接
频道热门
热门新闻
|
精粹集锦
特别推荐
频道精选
|