挑战PB高手!!动态生成的grid格式数据窗口,想在列标题上面加个标题 "统计报表"!!

时间:2022-10-20 23:20:03
挑战PB高手!!动态生成的grid格式数据窗口,想在列标题上面加个标题 "统计报表"!!

19 个解决方案

#1


恐怕不行

#2


可以吗?
gz....

#3


可做两个方法:
一种是在动态生成时,就生成标韪。
二种是在生成报表后,把head.height设置为一个值,后创建一个文本,可修改文本的位置和大小和内容。(如何创建文本可参看帮助)

#4


用Describe

#5


使用modify上面错了!

#6


来学习!

#7


生成窗口后用
用modify

#8


CREATE TEXT,,,,,,即可

#9


PB中如何给grid风格添加标题

PowerBuilder是大家公认的、最佳的数据库前端开发工具之一,其独到之处,那就是数据窗口(DataWindow)。它能够灵活地组织数据库中的各种数据,用户用一个简单的查询窗口就可以得到丰富的查询结果,并且能够对查询结果集通过程序控制,得出各种用户想得到的最终结果。如果能够熟练地运用数据窗口这一专利技术,无疑会给开发人员和用户带来巨大的方便。 
Grid是数据窗口中一种用于统计、分析数据的显示风格,与Execl表格类似,适合中国人的使用习惯。但是,开发者在使用Grid数据窗口时会碰到一个问题:由于其标题也呈网络状,PB没有提供较简单地设置标题的方法,怎样较好地给其添加标题就成为开发人员碰到的一个难题。通过探索,找到一种自认为较好的添加标题的方法。
假设给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

以上方法在PB6.5+Windows98中通过。


#10


我刚刚做过这样一个例子,是自动生成grid形式的数据窗口,并加一个标题
第一步://生成查询结果集
      //gf_sqltodw()该涵数为生成数据窗口语法的
      String ls_sqlsyntax = ""
      ls_sqlsyntax = gf_sqltodw(ls_sql)
      dw_1.create(ls_sqlsyntax)      
      dw_1.settransobject(sqlca)
      dw_1.retrieve()
第二步://创建标题
      ls_modi = "create text(band=foreground alignment='2' " &
     + "text='统计报表' border='0' color='8388608' x='5' " &
     + "y='20' height='352' width='500' html.valueishtml='0'  " &
     + "name=t_geng visible='1'  resizeable=1  moveable=1  " &
     + "font.face='宋体' font.height='-9' font.weight='400'  " &
     + "font.face='Arial' font.height='-12' font.weight='400'  " &
     + "font.family='2' font.pitch='2' font.charset='0' " &
     + "background.mode='2' background.color='16777215')"
     dw_1.modify(ls_modi)

#11


学习

#12


学习

#13


问题解决了吗?

#14


学习

#15


仅仅是个概念,具体实现靠自己

//改变头区高度
str_tmp=dw_print.Object.DataWindow.Header.Height
str_tmp=string(integer(str_tmp)+280)
dw_print.Modify("DataWindow.Header.Height='"+str_tmp+"'")
//
.
.
.
//各列标题位置下移
str_tmp=str_tmp+str_object+".y='"+string(integer(dw_print.describe(str_object+".y"))+280)+"'"
//得到最后一列的位置
int_maxy=max(int_maxy,integer(str_x2)
//加入标题
str_tmp='create text(band=header alignment="2" text="查  询  表"border="0" color="0" x="0" y="32" height="80" width="'+string(int_maxy)+'"  font.face="Arial" font.height="-14" font.weight="750"  font.family="2" font.pitch="2" font.charset="0" background.mode="2" background.color="16777215" )'
dw_print.modify(str_tmp)

#16


同意楼上的。简单又明了。

#17


收益

#18


各位高手,我想提个问题是:创建好的数据窗口,我用鼠标改变它的宽度,
顶上text宽度也应相应的改变。这个改变怎样在代码中来控制呢?(不是在它属性来设置)?
鼠标触发相应的事件是什么?
如果如在代码 把它的相应列的visible设置为false时,
顶上text的宽度。这个改变怎样在代码中来控制呢?

#19


dw_1.modify(colname+'.width='+sss)

#1


恐怕不行

#2


可以吗?
gz....

#3


可做两个方法:
一种是在动态生成时,就生成标韪。
二种是在生成报表后,把head.height设置为一个值,后创建一个文本,可修改文本的位置和大小和内容。(如何创建文本可参看帮助)

#4


用Describe

#5


使用modify上面错了!

#6


来学习!

#7


生成窗口后用
用modify

#8


CREATE TEXT,,,,,,即可

#9


PB中如何给grid风格添加标题

PowerBuilder是大家公认的、最佳的数据库前端开发工具之一,其独到之处,那就是数据窗口(DataWindow)。它能够灵活地组织数据库中的各种数据,用户用一个简单的查询窗口就可以得到丰富的查询结果,并且能够对查询结果集通过程序控制,得出各种用户想得到的最终结果。如果能够熟练地运用数据窗口这一专利技术,无疑会给开发人员和用户带来巨大的方便。 
Grid是数据窗口中一种用于统计、分析数据的显示风格,与Execl表格类似,适合中国人的使用习惯。但是,开发者在使用Grid数据窗口时会碰到一个问题:由于其标题也呈网络状,PB没有提供较简单地设置标题的方法,怎样较好地给其添加标题就成为开发人员碰到的一个难题。通过探索,找到一种自认为较好的添加标题的方法。
假设给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

以上方法在PB6.5+Windows98中通过。


#10


我刚刚做过这样一个例子,是自动生成grid形式的数据窗口,并加一个标题
第一步://生成查询结果集
      //gf_sqltodw()该涵数为生成数据窗口语法的
      String ls_sqlsyntax = ""
      ls_sqlsyntax = gf_sqltodw(ls_sql)
      dw_1.create(ls_sqlsyntax)      
      dw_1.settransobject(sqlca)
      dw_1.retrieve()
第二步://创建标题
      ls_modi = "create text(band=foreground alignment='2' " &
     + "text='统计报表' border='0' color='8388608' x='5' " &
     + "y='20' height='352' width='500' html.valueishtml='0'  " &
     + "name=t_geng visible='1'  resizeable=1  moveable=1  " &
     + "font.face='宋体' font.height='-9' font.weight='400'  " &
     + "font.face='Arial' font.height='-12' font.weight='400'  " &
     + "font.family='2' font.pitch='2' font.charset='0' " &
     + "background.mode='2' background.color='16777215')"
     dw_1.modify(ls_modi)

#11


学习

#12


学习

#13


问题解决了吗?

#14


学习

#15


仅仅是个概念,具体实现靠自己

//改变头区高度
str_tmp=dw_print.Object.DataWindow.Header.Height
str_tmp=string(integer(str_tmp)+280)
dw_print.Modify("DataWindow.Header.Height='"+str_tmp+"'")
//
.
.
.
//各列标题位置下移
str_tmp=str_tmp+str_object+".y='"+string(integer(dw_print.describe(str_object+".y"))+280)+"'"
//得到最后一列的位置
int_maxy=max(int_maxy,integer(str_x2)
//加入标题
str_tmp='create text(band=header alignment="2" text="查  询  表"border="0" color="0" x="0" y="32" height="80" width="'+string(int_maxy)+'"  font.face="Arial" font.height="-14" font.weight="750"  font.family="2" font.pitch="2" font.charset="0" background.mode="2" background.color="16777215" )'
dw_print.modify(str_tmp)

#16


同意楼上的。简单又明了。

#17


收益

#18


各位高手,我想提个问题是:创建好的数据窗口,我用鼠标改变它的宽度,
顶上text宽度也应相应的改变。这个改变怎样在代码中来控制呢?(不是在它属性来设置)?
鼠标触发相应的事件是什么?
如果如在代码 把它的相应列的visible设置为false时,
顶上text的宽度。这个改变怎样在代码中来控制呢?

#19


dw_1.modify(colname+'.width='+sss)

#20