PB的小技巧
1.如何使DataWindow中的数据只能追加新记录而不能修改。
利用 Column Protect 属性可以很方便的做到这一点,方法如下:
将每一列的 Protect 属性设置为:
If( IsRowNew(), 0, 1) )
PowerScript 中可以动态修改 Protect 属性:
            dw_1.Modify("column_name_here.Protect='1~tIf(IsRowNew(),0,1)'")
2. 允许从空的非字符字段跳离
string s
s = this.dwDescribe(this.GetColumnName()+".coltype")
//s = this.dwDescribe("#"+String(this.GetColumn())+".coltype")
CHOOSE CASE s
CASE "number"
    IF Trim(this.GetText()) = "" THEN
        int null_num
        SetNull(null_num)
        this.SetItem(this.GetRow(),this.GetColumn(),null_num)
        this.SetActionCode(3)
    END IF
CASE "date"
    IF Trim(this.GetText()) = "" THEN
        date null_date
        SetNull(null_date)
        this.SetItem(this.GetRow(),this.GetColumn(),null_date)
        this.SetActionCode(3)
    END IF
CASE "time"
    IF Trim(this.GetText()) = "" THEN
        time null_time
        SetNull(null_time)
        this.SetItem(this.GetRow(),this.GetColumn(),null_time)
        this.SetActionCode(3)
    END IF
CASE "datetime"
    IF Trim(this.GetText()) = "" THEN
        date null_datetime
        SetNull(null_datetime)
        this.SetItem(this.GetRow(),this.GetColumn(),null_datetime)
        this.SetActionCode(3)
    END IF
END CHOOSE
3. 当我们为Datawindow的每一行显示行号时
可以简单的放一个表达式为GetRow() -- 计算列。
但是对于分组的Datawindow,要分别显示各组的行号,则应使用表达式为
GetRow() - First(GetRow() for Group 1) + 1的计算列。
4. 访
---- rows” Update Properties” 定。
---- 1.Allow Updates 中, 改, 许;
---- 2.Table to Update 时, 名;
---- 3.Where Clause for Update/Delete 项, 置。
---- Update ,数据窗 使 SQL 统, SQL where 使 志。
---- aKey Columns 使 志。
使 项。 录, 觉。
---- bKey and Updatable Columns 使 rows函数的使用方法及实例 志。
---- 下, Update 行。
---- cKey and Modified Columns 使 志。
---- 和(b 似, 于(b 快, 慢; 而(c 反。
---- 4.Key Modification 法。
---- aUse Delete then Insert 除, 入。
---- bUse Update 改。
---- 使 用(b 项。
---- 5. Updatable Columns 3.b 应, Update 中。
---- 6.Unique Key Columns 字, 3.a 应, Update 中。
5. 使DW自动折行
你可以在Datawindow中使列象MultiLineEdit Control,方法如下: Datawindow
Painter中,把列的Edit Styles选为Edit,取消Auto H Scroll并且选择V Scroll
Bar.确信Limit是字符的确实个数。单击OK.现在你可以改变列的高度和宽度了。
但用户敲到一行的末尾时,会自动跳到下一行。也可以敲Enter来结束。注意:
连在一起的汉字(中间没有标点或空格分隔), 系统将认为是一个单词, 会自动进行折行
6. 当你创建一个编辑风格为drop-down DataWindowor drop-down listbox) ,并且实际字段允许为空(empty string is null),你必须让用户可以删除选中的值.
如果required选项选中,你不可能去掉dddw中的值,因此,required不能选中。
DW中定义事件:pbm_dwnkey(PFC does this for you with the key event in u_dw.)
脚本:
string s_null
long l_row
IF key = KeyDelete! THEN
IF This.GetColumnName() = 'dept_id' THEN
l_row = This.GetRow()
IF l_row < 1 THEN
Return
ENDIF
SetNull(s_null)
This.SetItem(l_row, 'dept_id', s_null)
ENDIF
ENDIF
7.取出列的显示内容
string ls_value
ls_value=dw_1.describe("Evaluate('lookupdisplay(column_name)',1)")
column_name=列名 ,'1'表示第一行;看看Help中的Describe
8.每页打印固定行
第一步:增加一个计算列,此计算列必须放在Detail段,Expression中输入: ceiling(getrow()/20)
<--这里20还可以用全局函数取代,这样可以允许用户任意设置每页打印多少行.
第二步:定义分组,选择菜单Rows->
按计算列字段分组,并一定将check box-->New Page On Group Break选中。
第三步:将此计算列设为不可视。
另外,如果需要最后一页不足补空行。也很简单,如下:
long ll_pagerow = 6 //每页打印行数
long ll_count, ll_row ll_count = ieve(...)
//取得现有报表的总行数
ll_count = ll_pagerow - mod(ll_count, ll_pagerow)
If ll_count < ll_pagerow Then for ll_row = 1 to ll_count
dw_print.insertrow(0) //补足空行
next
end If
9PowerBuilder提供了一种使用函数的方法来高亮度显示数据窗口中细节栏
但有时你需要高亮度显示分组条及细节栏,
这时你需要增加一个long类型的实例变量(假设为Il_LastRow)
并且在数据窗口中增加一个额外的列(假设为highlight)
并在rowfoucs事件增加以下代码:
SetItem( il_LastRow, 'highlight', 0 ) SetItem( currentrow, 'highlight', 1 )

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。