PB 之多行标题报表
第一种
1.添加一个text,将背景色选为非透明色;position中的layer,选为foreground,这样就可以拖动列宽了
2.在position属性标签页的width里,点右边的小按钮,出现定义其宽度的对话框,在里面输入long(describe("ck_je_t.x")) + long(describe("ck_je_t.width")) - long(describe("ck_sl_t.x")),这里红色的部门作一个解释,这里实际上定义了text的动态列宽,即它的列宽要依据“金额”列的x值 + “金额”列的宽度,再减去“数量”列的x值,这样实际上就在程序运行时,可以动态地设置“出库”标题栏的列宽了。
3.再设置text的x值,在PB10.5里,x值右边的小按钮显示为灰色,不可用,没关系,关掉它,在system tree里找到它,再用edit source找开它,学会分析,找到刚才添加的text的属性,在默认值后面加上一个表达式,我加的是“~tlong(describe(~"ck_sl_t.x~"))”,注意其中的格式,在edit source里,会用~t作为分隔符。
4.好了,试试看吧, 在程序运行时,拖动列,跨列的标题头也跟着动了,完全达到了我们要求的效果。
假设给Grid加两个标题:d_bt1,d_bt2。d_bt1为大标题,d_bt2为小标题,如有多个小标题同样添加。假设数据最后一列名为n03。
一、添加标题d_bt1(大标题)
1、放一个Text(文本框)对象到DataWindow的表头上:将header向下拉,再将表头部分向下移,然后放一个Text对象到header区。
2、在此Text上点击鼠标右键选择Properties:①General:在name栏设置标题名:d_bt1;②Font:Text Color->Black,Background->White;③Position:x=0,y=0,Layer->Foreground;④Expression:设置font.weight与width的表达式:long(describe('n03.x'))+long(describe('n03.width'))+10,其中n03为Detail部分的最后一个字段名称,加10是为了盖住最右边的网格线。将标题设为居中,在改变表格栏目大小时标题会随之变动。
3、改变Text的位置和宽度,然后将此Text的内容改为正确的报表标题,记下Position.Width与Height的值。
二、添加标题d_bt2(小标题)
1、放一个Text对象到DataWindow表头的标题d_bt1下。
2、在此Text上点击鼠标右键选择Properties:①General:在name栏设置标题名:d_bt2;②Font:Text Color->Black,Background->White;③Position:x=0,y=200(200为d_bt1.Positon.Height的值),Layer->Foreground,将Width的值设为d_bt1.Position.Width的值;④Expression:设置font.weight与width的表达式:long(describe('n03.x'))+long(describe('n03.width'))+10,说明同上。
三、添加横线
1、在DataWindow表头的标题d_bt2下放一械Line(横线)对象。
2、在此Line上点击鼠标右键选择Properties:①Position:x1=0,x2=d_bt1.Position.Width,y1与y2的值应为d_bt2.Position.y+d_bt2.Position.Height,在设计时取值比此值稍大一些,便于设计;②Expression:x2=long(describe('n03.x'))+long(describe('n03.width'))+9,y1(y2)=long(describe('d_bt2.y'))+long(describe('d_bt2.height'))
四、在脚本中动态修改标题内容
对于标题中文本可以用dw_1.modify("text_name.text = '标题'") 在程序中动态修改,标题部分还可使用变量。
五、如何修改显示方式为grid的DataWindow的字段的顺序?
在数据窗口画板中,PB不允许拖动列来改变列的顺序。技巧是在预览中,拖动列到你想要的顺序,返回到画板中,保存即可。
六、如何取DW中Summary的值
if dw_1.RowCount() > 0 then
em_1.text = string(dw_1.Object.hjhs[1])
else
em_1.text = '0'
end if
七、如何使数值0显示为空白
在Detail上选中相应的字段(数值型),在属性(Properties)中的Expressions的color栏输入:
if(字段名 = 0, rgb(255,255,255), rgb(0,0,0))
八、如何确定多选的行
用isselected()
选择:
long CurRow
boolean result
CurRow = dw_employee.GetRow()
result = dw_employee.IsSelected(CurRow)
IF result THEN
dw_employee.SelectRow(CurRow, FALSE)
ELSE
dw_employee.SelectRow(CurRow, TRUE)
END IF
应用:
for currow = 1 to dw_1.rowcount()
if dw_employee.IsSelected(CurRow) then
...
end if
next