如何使DataWindow中的数据只能追加新记录而不能修改,利用 Column 的 Protect 属性可以很方便的做到这一点,方法如下:
将每一列的 Protect 属性设置为:
If( IsRowNew(), 0, 1) )
在 PowerScript 中可以动态修改 Protect 属性:
dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")
这样,DataWindow 中只有新追加的记录可修改,而其他记录是只读的。
2 如何在DataWindow中实现列的自动折行
我们在PowerBuilder应用程序的开发过程中, 使用DataWindow时, 经常会遇
到某列的数据太长, 不能同时全部显示的情况. 若采用自动水平滚动, *** 作起
来又不够简便. 下面介绍一种方法, 实现列数据多行显示, 即实现列数据的自
动折行.具体步骤如下:
1) 在DataWindow Painter中打开此DataWindow.
2) 在需设定自动折行的列上双击鼠标, d开此列的属性窗口.
3) 选择Position标签, 选中Autosize Height 多选框.
4) 选择Edit标签, 不选中Auto Horz Scroll多选框.
5) 单击OK按钮, 保存所做的修改.
6) 点中Detail Band (即写梁春饥有Detail的灰色长带), 单击鼠标右键, 选择
Properties... 菜单项.
7) 选中Autosize Height多选框.
8) 单击OK按钮, 保存所做的修改.
9) 保存此DataWindow.
注意:
连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 不
会自动进行折行.
3 在数据窗口中实现动画
要实现动画,必须要有定时器,在数据窗口中已经有了一个定时器,双击数据窗口将d出的对话框,在Timer Interval中定义大于零的值就有定时器(可以精确到毫秒),有了这个定时器就可以实现动画了。比如要改变某字段的背景颜色,可设
ackgound.color=RGB(Integer(Right(string(now(),'hhmmssf'),1))*256/10,Integer(Right(string(now(),'hhmmssf'),1))*256/10,0)
当然,您不仅可以改变背景颜色,而且可以改变字体等等任何属性,使他可以动起来!
4 使数据窗口中的被选中行具有更好的外观
大家都知道,在选择数据窗口中的某一行时,如果使用pb提供的选择函数SelectRow(),那么的外观真是不能恭维,单调而古板的蓝色背景,可能和您的漂亮而生动的应用程序格格不入。有没有办法改变呢?当然有啰,请听我慢慢道来。
改变某一行的背森消景比较简单,改变每一列的背景属性(backgroundcolor)即可,可要根据鼠标选择情况自动改变,并可以返回被选中的行可能还需要一定的技巧。下面分单行选择和多行选择分辨说橡返明。
单行选择
单行选择比较简单,我们只要将所有字段的背景色的表达式改为:
if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0))
其中第一个颜色为被选中的颜色,第二个颜色未被选中的颜色。然后用GetRow()代替GetSelectedRow()函数来得到被选中的行。
多行选择
多行选择比较复杂,如果单纯依靠改变数据窗口的属性没法实现,我们必须使用数据窗口属性和代码结合起来才能实现
首先,改变数据窗口的SQL语句,增加一个计算字段:0 as flag,Select 语句改为:
Select col1,col2 ,1 as flag from tablename where .....,
当返回数据窗口painter时,您就会发现多了一个字段flag,我们就是利用这个字段保存行被选中的信息。
其次,修改各个字段的背景颜色属性,设置为:if(flag=1,RGB(255,126,0),RGB(255,255,255))
第三:在数据窗口控件中,增加对clicked 事件的处理,代码如下:
if row<1 then return // setredraw(false)
if this.o b j e c t.flag[row]=1 then //如果该行被选中,撤销选择,否则选中该行
this.Object.flag[row]=0
else
this.Object.flag[row]=1
end if
setredraw(true)
您还可以定制本选中行的字体,文本属性等等。原理相同,不再赘述。
5 将日期型字段初始化为当天的日期
使用 Column Specifications 对话框来设置数据的初始值是一个比较好又比较通用的方法。为了将日期型字段初始化为当天的日期,只要设置初始化值为today,而不是today()即可。同样设置初始值为NUll,可以使用null,而不是 null()。
6 在DataWindow中调整列顺序
在 Gird 风格的 DataWindow 中,列的排列顺序是按照你选择 Column 的顺序排列的,并且不能改变.要改变列的顺序则必须重新制作 DataWindow.
最近我发现一个办法可以改变列的顺序: 在 DataWindow 画板中打开要修改的 DataWindow,然后按 'Preview' 按钮切换到预览模式下,选择要移动的列标题并拖动到预定位置,然后返回 DataWindow 画板,存盘即可.
7 Retrieve时不清除原有Datawindow数据
当你调用Retrieve函数,PowerBuilder自动清除原有DataWindow然后Retrieve数据。在Datawindow RetrieveStart事件中,使用Return 2,这样PowerBuilder不会清除原有数据而是追加新数据。
8 美化DataWindow的显示效果
使DataWindow 的单双行显示颜色不同,不仅仅可以使你的应用程序更显专业性,并使数据的可读性增强。先调出你需要改动的DataWindow,在Detail band按下右键选择Properties,选择Tab页中的expression_rs,在color属性中输入下面内容:(注意是在Detail明细显示段按右键,而不是在Column上) IF(MOD(GETROW(),2)=0,RGB(192, 192, 192), RGB(255, 255, 255)) 马上Preview一下,看一看效果如何。
9 用Line建立漂亮的Grid DataWindow的技巧
虽然PowerBuilder有Grid风格的DataWindow,但不够灵活,如果想打印一张边框粗线条或双线,内框为细线条的表格直接使用Grid风格的DataWindow就不能实现。因此许多人都用Tabular风格的DataWindow,然后自己用Line来实现Grid。在调整线条位置是一个即伤脑筋又伤眼睛的事件,而一旦需要调整行高,所有工作都得重来,试一试用下面方法,会大大减轻你的工作量:在vertical lines,改变它的属性,在expression_rs Tab上,y1行上输入0,y2行上输入rowheight() - 1 在horizontal lines, 设置 y1 和 y2 = rowheight() - 5 这样PowerBuilder会自动调整线的坐标,你只需要设置横线的长度和x1,x2的坐标即可。 马上Preview一下,看一看效果!你再也不需要因为行的高度发生改变而重新调整线条位置。
10 如何创建一个报表,如下形式
Quantity Running Total
5,000 5,000
2,500 7,500
3,000 10,500
12,000 22,500
对于Running Total列,我们可使用计算列:CumulativeSum(Quantity for all),即可达到逐渐递增求和的功能。
11 数据窗口的数据送缓冲区之前确认的四个步骤判断数据类型是否正确。如不正确则触发ItemError事件。判断数据是否符合有效性规则。如不符合有效性规则,同样触发ItemError事件。判断是否有数据被改动。判断数据是否通过ItemChanged事件,如果数据和ItemChanged相斥,将触发ItemError事件。
您正在看的Powerbuilder教程是:在PB中调用外部尘迅程序并判断其运行结束
在PB中经常要调用外部程序并等待此程序运行结束后显示相关信息 如我们要备份Adaptive Server Anywhere 数据库 在备份结束后显示 备份完成! 的提示信息 如果在调用备份铅虚程序dbbackup后马上用messagebox显示提示信息 那派激此么程序运行时则会出现这种情况 dbbackup备份程序还在运行 备份完成! 的提示就已经显示了 显然不符合我们的设想 对于这种情况 我们可以借助API函数FindWindowA() IsWindow()和PB本身函数yield()来解决
声明API函数
Function long FindWindowA (String lpClassName String lpWindowName ) Library user dll Function boolean IsWindow (Long hwnd ) Library user dll调用
ulong ll_handle int li_loop
SetPointer(HourGlass!) //设置鼠标指针 //运行备份数据库程序dbbackup 并使其最小化 run( dbbackup c ~ uid=dbapwd=sqldbf=D:\Sybase\Adaptive Server Anywhere \asademo db~ d:\backup Minimized!)
lishixinzhi/Article/program/PB/201311/24551
我用的环境是WindowsXP系统,PowerBuilder9在调试时使用的是Windows经典样式,它是不管系统的显示样式如何设置的,所以当系统显示样式设置成其它样式时,编译后的程序运行界面就与调试时显示的界面就可能会出现差异。
其实,这种差异并不是一种“错误”,只是显示时因样式变化而出现的走样。如果是WindowsXP系统,将显示样式设置成Windows经典样式,可以确保两种试运行时界面显示一样。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)