PB11的Web DW增加了一个很好用的AppendedHTML属性,利用它,可以增加你自己的HTML元素到系统转换到.NET下生成的HTML页面内,因此,可以利用这个特性配合JavaScript语法来指定DW中行的外观甚至客户端的事件代码。本人在以前的文章中提到过客户端可以利用.JS文件达到延缓或suppress回调事件的发生,这里的AppendedHTML主要是更改客户端行为以及对onmouseove、onmouseout、click等鼠标事件编程。
例如,下图所示:
如果我们需要在发布的WEB应用中,在这个DW内的“编号”字段上达到鼠标移进-移出产生特殊效果,就必须用到AppendedHTML属性,示例中的含义就是:当鼠标移动到这里时,“编号”数据区会显示为另一种背景颜色,同时鼠标变为手形,移开时又恢复了。
当然有人会说,这个效果我们利用PB本身的条件表达式不也可以达到吗? 但是,实际上,通过DW内的条件表达式(IF)是无法实时反映到屏幕上来的,包括指定列的Pointer属性,因为那是服务端的代码了,没有POSTBACK之前是无法更改到客户端来的。
利用这样的方法,我们可以为DW上的每列指定相同的AppendedHTML就可使得鼠标无论移到这行的哪里,都会产生特殊效果。
但是,如果我们想让当鼠标移动到DW内的任意一行的任意一列时,当前行的整列都是同一种背景效果,是否可以呢? 不行,只能当前列显示。
为此,需要对当前行进行操作。 但是DW没有为行指定AppendedHTML属性的机制。
通过分析发现,DW转换为HTML页面时,DW内的行是以<SPAN>标签对形式出现的,不是我事先想象的
表格的<TR>对出现,所以,要加AppendedHTML进去,必须按SPAN需求写正确的HTML。最后就可达到如下图所示的效果:
我的powerSCRIPT代码片段是:
row_count = integer(adw.object.DataWindow.Column.Count)
for col_li=1 to row_count
colname =adw.Describe("#"+string(col_li)+".dbname")
colname = adw.Describe("#"+string(col_li)+".name")
if adw.Describe(colname+".Pointer") = '"HyperLink!"' then
ls_cur = "event.srcElement.parentElement.style.cursor=~~~'hand~~~'; "
else
ls_cur = "event.srcElement.parentElement.style.cursor=~~~'default~~~'; "
end if
adw.Modify(colname+".HTML.AppendedHTML=" +&
"' οnmοuseοver=~"{event.srcElement.parentElement.style.backgroundColor=~~~'" + ls_gc + "~~~'; " + ls_cur + " }~" " +&
" onmouseout =~"{event.srcElement.parentElement.style.backgroundColor=~~~'~~~';}~"'")
next
注意其中的~符号哦,不要搞错了,错误的HTML是无法让PB2CS找出来的!
可以将这段代码做为一个函数,DW作为第一个参数,ls_gc做为第2个参数指明背景颜色,采用HTML格式,如#FF00FF
这样在需要的地方就可这样调用: f_function-name ( dw_list , '#FFEE66' )
最后当发布为WEB时,鼠标移过的地方就会产生高黄背景带,同时,如果移到在DW内指定了pointer属性的字段上时就会出现鼠标手形(例如上图中的编号字段,但图上看不到鼠标,因为抓屏抓不到鼠标手形)。是不是很COOL啊!
因为目前有关PB11的WEB应用的资料很少,以上做法,花去本人整整2天的时间才探索出来,特奉献给需要的朋友。