怎样实现数据窗口的指定打印页数?

leonwan 2001-05-21 09:08:00
各位大虾:

如果下拉列表统计的数据量比较大,比如有几万条数据时。要实现对数据的指定打印,
该如何实现?
...全文
200 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liulee 2001-05-27
  • 打赏
  • 举报
回复

呵呵,怎么尽给我啊...

Methodor 2001-05-26
  • 打赏
  • 举报
回复
太旧了吧~~
4、5年前有人看~~
现在。。。~~
leonwan 2001-05-26
  • 打赏
  • 举报
回复
大家来看看呀。
leonwan 2001-05-26
  • 打赏
  • 举报
回复
结案了。
leonwan 2001-05-25
  • 打赏
  • 举报
回复
现在给出方法,让那些可能碰到这问题的人们不要走弯路了。

//转载

PowerBuilder 中 数 据窗 口 的 精 确 页 面 打 印 技 术

中国计算机世界

国 永 杰 张 颖

---- 摘 要 本 文 详 细 介 绍 了PowerBuilder 中 数 据 窗 口 打 印 输 出 技 术, 并 给 出 了 一 个 通 用 的 数 据 窗 口 打 印 控 制 程 序。

---- 关 键 词 PowerBuilder DataWindow Print

1. 引 言

---- 自PowerBuild 4.0 问 世 以 来, 以 其 简 洁 高 效 的 集 成 开 发 环 境、 强 大 的 数 据 窗 口 技 术、( 几 乎) 无 所 不 能 的 数 据 库 访 问 能 力, 越 来 越 受 到 编 程 人 员 的 青 睐。 据Sybase 自 己 的 统 计, 目 前 全 球 有60 万 程 序 员 和 系 统 分 析 人 员 在 使 用 他 们 的Powerbuilder 和S-designer, 进 行 各 种 类 型 的 应 用 程 序 开 发。 最 新 发 布 的PowerBuilder 6.0 族 系 列 开 发 工 具, 直 接 支 持Active X 技 术、Server Push 技 术, 对 分 布 式 计 算 模 型 的 定 义 更 加 明 确, 实 现 更 为 简 便, 并 可 以 利 用 数 据 窗 口 直 接 生 成HTML 格 式 文 件, 等 等。 所 以,PowerBuilder 已 成 为C/S 模 式 应 用 和 基 于InterNet 模 式 应 用 的 主 要 开 发 工 具 之 一。

---- 数 据 窗 口(DataWindow) 是PowerBuilder 的 专 利, 也 是PowerBuilder 应 用 程 序 的 核 心 和 精 华 所 在.PowerBuilder 通 过 丰 富 的 属 性 和 函 数 来 控 制 数 据 窗 口 的 显 示 和 数 据 操 纵, 但 对 数 据 窗 口 的 打 印 支 持 似 乎 过 于 简 单, 只 有 一 个Print() 窗 口 函 数 和 一 个PrintDataWindow PowerScript 函 数, 并 且 这 两 个 函 数 的 功 能 几 乎 都 是 一 样, 都 只 简 单 地 将 选 定 数 据 窗 口 原 样 送 入 打 印 队 列, 本 身 不 具 备 页 面 控 制 功 能。 为 此 很 多 程 序 员 抱 怨 这 是PowerBuilder 的 一 个 缺 陷, 其 实,PowerBuilder 对 打 印 功 能 的 支 持 一 样 十 分 周 到 全 面, 只 不 过 应 用 场 合 不 同, 需 要 用 户 自 行 加 以 选 择。

---- 以 下 是 对PowerBuilder 打 印 控 制 功 能 的 详 尽 分 析, 并 介 绍 一 个 实 用 的 数 据 窗 口 页 面 控 制 程 序。

2. Powerbuilder 实 现 动 态 页 面 控 制 的 途 径

---- PowerBuilder 数 据 窗 口 有 一 对 函 数Describe 和Modify, 用 于 动 态 描 述 和 修 改 数 据 窗 口 结 构, 与 其 它 相 关 函 数 结 合 可 以 完 成 动 态 生 成 数 据 窗 口、 任 意 改 变 数 据 窗 口 显 示 方 式、 修 改 打 印 属 性 等。 这 两 个 函 数 是 控 制 与 修 改 数 据 窗 口 的 核 心 函 数, 其 使 用 方 法 如 下:

---- 1) Describe 获 取 数 据 窗 口 特 定 属 性 值

---- 语 法:dwcontrol.Describe ( propertylist)

---- 参 数:dwcontrol 数 据 窗 口( 或datastore) 控 件 名。

---- propertylist 用 字 符 串 表 示 的 数 据 窗 口 属 性。

---- 返 回 值: 返 回 一 个 表 示 属 性 的 字 符 串。

---- 数 据 窗 口 属 性 值 也 可 以 用dwcontrol.object.Datawindow.property 来 完 成 直 接 取 得。

---- 2) Modify 修 改 数 据 窗 口 特 定 属 性

---- 语 法:dwcontrol.Modify ( modstring )

---- 参 数:dwcontrol dwcontrol 数 据 窗 口( 或datastore) 控 件 名。

---- modstring 用 字 符 串 表 示 的 数 据 窗 口 属 性。

---- 返 回 值: 如 果 函 数 执 行 成 功 返 回“1”。

---- 与Describe 类 似, 修 改 数 据 窗 口 属 性 可 以 用:

---- dwcontrol.object.Datawindow.property = value 直 接 赋 值。

---- 3) 与 打 印 有 关 的 数 据 窗 口 属 性

---- 数 据 窗 口 属 性 中 与 打 印 有 关 的 有24 个, 其 中 实 现 打 印 页 面 控 制 的 几 个 属 性 是:

---- Copies: 打 印 份 数。

---- Filename: 如 果 不 为 空, 表 示 输 出 到 文 件 的 文 件 名。

---- Orientation : 打 印 方 向1= 横 向,2= 纵 向

---- Page.Range: 输 出 页 范 围, 要 打 印1,2, 和5 到10 页, 输 入: "1,2, 5-10"。 Page. RangeInclude: 本 次 打 印 范 围,0= 全 部,1= 偶 数 页,2= 奇 数 页。Paper.Size: 纸 张 大 小。

---- Scale: 打 印 比 例。

---- 程 序 中 利 用Modify 函 数 设 置 好 这 些 属 性 后, 即 可 实 现 动 态 修 改 数 据 窗 口 的 目 的, 再 调 用datawindow.print() 函 数, 完 成 最 后 的 打 印 输 出。

一 个 通 用Datawindow 打 印 控 制 程 序

---- 将 数 据 窗 口 中 的 报 表 在 打 印 机 上 输 出 是PowerBuilder 应 用 程 序 开 发 过 程 中 必 不 可 少 的 功 能, 作 为 例 子, 这 里 提 供 一 个 使 用 上 述 方 法 研 制 的 通 用 打 印 控 制 窗 口, 用 以 替 代Prompt 属 性 所 提 供 的Print 窗 口, 实 现 汉 化 界 面, 并 且 可 被 自 行 修 改 扩 充。 为 了 书 写 简 单, 程 序 中 采 用 直 接 赋 值 的 方 式 修 改 属 性。

 

实 例 变 量:

datawindow dw_print

string printername , name ,port

窗 口open 事 件 脚 本:

dw_print = Message.PowerObjectParm

printername = dw_print.Object.Datawindow.Printer

name = left(printername,pos(printername,"on") -1)

port = right(printername,len(printername) - pos(printername,"on")-1)

plb_printername.additem(name,1)

st_portname.text = port

“ 设 置” 按 钮clicked 事 件 脚 本

Integer code

Code = printSetup()

If code =1 then

printername = dw_print.Object.Datawindow.Printer

name = left(printername,pos(printername,"on") -1)

port = right(printername,len(printername) - pos(printername,"on")-1)

plb_printername.additem(name,1)

st_portname.text = port

end if

打 印 范 围 组 中“ 全 部” 选 择 钮clicked 事 件 脚 本

dw_print.object.DataWindow.Print.Range =''

sle_1.enabled = false

sle_2.enabled = false

sle_3.enabled = false

“ 页 数” 栏 后sle_2 单 行 文 本 编 辑 框Modified 事 件 脚 本

dw_print.object.DataWindow.Print.Page.Range = sle_1.text + "-" + sle_2.text

“ 自 定 义” 栏 后sle_3 单 行 文 本 编 辑 框Modified 事 件 脚 本

dw_print.object.DataWindow.Print.Page.Range = sle_3.text

打 印 份 数 组 中 份 数 单 行 文 本 编 辑 框Modified 事 件 脚 本

dw_print.Object.DataWindow.Print.Copies = integer(this.text)

“ 全 部” 选 择 钮Cliecked 事 件 脚 本

dw_print.Object.DataWindow.Print.Page.Rangeinclude =0

“ 奇 数” 选 择 钮Cliecked 事 件 脚 本

dw_print.Object.DataWindow.Print.Page.Rangeinclude =1

“ 偶 数” 选 择 钮Cliecked 事 件 脚 本

dw_print.Object.DataWindow.Print.Page.Rangeinclude =2

“ 确 认” 命 令 按 钮Clicked 事 件 脚 本

long job

if IsValid(dw_print) then

job = PrintOpen( )

PrintDataWindow(job, dw_print)

PrintClose(job)

close(parent)

end if

“ 取 消” 命 令 按 钮Clicked 事 件 脚 本

close(parent)

---- 窗 口 调 用 方 法: 在 其 它 带有 数 据 窗 口 的 窗 口 中, 使 用OpenWithParm(w_print_set,dwname) 即 可, 其 中w_print_set 为 本 窗 口 名,dwname 为 要 打印 的 数 据 窗 口。 该 程 序 是 一 个 通 用 打 印 控 制 程 序, 可 在 任 何 版 本 的PowerBuilder 应 用 中 使 用。

liulee 2001-05-25
  • 打赏
  • 举报
回复
呵呵,给自己加分吧.
leonwan 2001-05-25
  • 打赏
  • 举报
回复
解决了。
powered 2001-05-25
  • 打赏
  • 举报
回复
有用,很好!

1,108

社区成员

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

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