动态创建一个窗口,在窗口上动态建立一个freeform形式的datawindow,如何解决?

tjtjtj 2004-08-21 10:46:57
我想动态创建一个窗口,在窗口上动态建立一个freeform形式的datawindow,各个字段来自那张表,能不能给出代码
...全文
170 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
debye 2004-08-21
  • 打赏
  • 举报
回复
下面的是我写工资系统时用到的动态创建数据窗口的代码(部分)
我的字段是可以让客户设置的,然后从设置表中取出来创建


//
string ERRORS
string sql_syntax
string presentation_str, dwsyntax_str
//选取三个不变的项目,且月份要隐藏
sql_syntax = "select t_yggz.gzid, t_yggz.month, t_yggz.bh,t_ygzl.name,t_ygzl.sslb,t_ygzl.zc,"
//选取应发项目
string ls_cur_xm
declare yfxm_cur cursor for select zdname from t_gzbxm ;
open yfxm_cur;
fetch yfxm_cur into :ls_cur_xm;
do while sqlca.sqlcode=0
if ls_cur_xm <> "yfhj" and mid(ls_cur_xm,1,2)='yf' then
sql_syntax = sql_syntax + "t_yggz." + ls_cur_xm +" ,"
end if
fetch yfxm_cur into :ls_cur_xm;
loop
close yfxm_cur;
//选取应发合计
sql_syntax = sql_syntax + "t_yggz.yfhj,"

//选取扣款项目
declare kkxm_cur cursor for select zdname from t_gzbxm ;
open kkxm_cur;
fetch kkxm_cur into :ls_cur_xm;
do while sqlca.sqlcode=0
if ls_cur_xm <> "kkhj" and mid(ls_cur_xm,1,2)='kk' then
sql_syntax = sql_syntax + "t_yggz." + ls_cur_xm +" ,"
end if
fetch kkxm_cur into :ls_cur_xm;
loop
close kkxm_cur;

//选取扣款合计
sql_syntax = sql_syntax + "t_yggz.kkhj,"

//选取所得税
sql_syntax = sql_syntax + "t_yggz.sds,"

//选取实发工资
sql_syntax = sql_syntax + "t_yggz.sfgz "

//最后连上表名称和条件
sql_syntax = sql_syntax + " from t_yggz,t_ygzl where t_yggz.bh=t_ygzl.bh ORDER BY T_yggz.bh ASC "
//数据窗口的风格
presentation_str = "style(type=grid) column(border=0) text(border=0)"
/* Column ( property=value ... )
Group groupby_colnum1 Fby_colnum2 ... property ... )
Text property=value ... )
*/
//
dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax,presentation_str, ERRORS)
dw_1.Create( dwsyntax_str, ERRORS)


//修改数据窗口各列显示标题的标题名,背景色,模式
string ls,ls_temp

dw_1.modify("t_yggz_bh_t.text='员工编号'" )
dw_1.modify("t_yggz_bh_t.background.mode='2'")
dw_1.modify("t_yggz_bh_t.background.color='33348292'")
dw_1.modify("t_yggz_bh_t.border='6'")

amekoxiao 2004-08-21
  • 打赏
  • 举报
回复
楼上的可以参考
一般是要用create的
用三种方法
1 调用syntaxfromsql函数
2 调用librayexport函数
3 用户自己创建syntax
具体的希望 楼主自己考虑解决
ouyangibing 2004-08-21
  • 打赏
  • 举报
回复
看一下这段代码:(我也是别处看到的)

string ERRORS, sql_syntax

string presentation_str, dwsyntax_str

sql_syntax = "SELECT * FROM 表名"

presentation_str = "style(type=freeform)"

dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax,presentation_str, ERRORS)

IF Len(ERRORS) > 0 THEN

MessageBox("Caution", "SyntaxFromSQL caused these errors: " + ERRORS)

RETURN

END IF
dw_1.Create( dwsyntax_str, ERRORS)
dw_1.settransobject(sqlca)
dw_1.retrieve()
IF Len(ERRORS) > 0 THEN

MessageBox("Caution", "Create cause these errors: " + ERRORS)

RETURN

END IF
数据窗口源码介绍 (举例见d_dbit_example.srd,测试数据库为PB自带的EAS Demo DB V120) 1.第一行:release 12; 数据窗口所属PB的版本号,如果想把高版本的datawindow导入低版本的PB中要修改此数字; 2.datawindow()行 通常用修改processing属性,可以把你的数据窗口由grid变成freeform或其它类型 例:freeform:0 grid:1 3.header()行 可以整行复制粘贴,并命名为header[1],header[2],这样可以让数据窗口有多个header 4.table()行 这里全是定义的数据属性,是setitem,update,object.data等方法访问的根源 如果存在table()里的column,数据窗口里可以不存在任何对象,仍然可以访问数据窗口的数据 如果想创建一个空的数据窗口,可以只定义: release 12; table() 5.table(column行) 是第几个column,它的ID就是多少,其中也定义了是否可以update时和更新到数据表的字段名 6.table(retrieve行) 检索数据时使用的SQL语句,可以通过setsqlselect或modify("table.sqlselect")方法去动态修改 修改后要重新定义数据窗口的更新属性 7.column()行 id即是对应table(column行)里的行次,名称(name)可以随便命名,也可以没有,则默认为table(column行)里的name 8.compute()行 计算列,可以通过表达式计算显示特定值(具体函数可以见共享里的画笔函数). 9.text()行 有时可以代替计算列; 通过定义text的表达式,可以实现一列中显示两个字段值,注意结果必须要转换成string类型(而column和compute则不行); 10.htmltable()行 按照格式导出(saveas)html文件,为了保证格式的完整,数据窗口的单位最好设置成pixels GenerateCSS='1' //保持格式及颜色 Border='0' //不要table边框 CellSpacing='0' //单元格无间距(此项在界面上经常设置不上) 注: (1)Grid生成标签,Freeform生成
+ 标签; (2)生成htmltable时,不知为何会在CSS中的开始自动加一个分号";",导致excel等浏览器打开不能正常显示格式; (3)band为foreground或background的对象导不出来,可以动态修改后再导出. 11.export.xml()行 定义导出xml文件的格式,并为模板保存名称 使用时一定要设置usetemplate值 12.import.xml()行 定义导入xml文件的格式,并为模板保存名称 使用时一定要设置usetemplate值 13.表达式介绍 略 14.其它也略

1,106

社区成员

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

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