当前位置: 代码迷 >> PB >> 设置Detail域的背景色之后的一个奇怪有关问题
  详细解决方案

设置Detail域的背景色之后的一个奇怪有关问题

热度:17   发布时间:2016-04-29 06:51:47.0
设置Detail域的背景色之后的一个奇怪问题
本帖最后由 jjoulejcc 于 2013-03-14 21:24:08 编辑
开发环境:PB11.5 Build 3127

    我是想实现这样的效果,当前选中行的颜色为红色,非选中行为白色。在Grid风格的数据窗口对象的Detail域背景色表达式中写如下代码:IF( GetRow() = CurrentRow(), RGB(255, 0, 0), RGB(255, 255, 255) )
OK,效果是实现了,鼠标单击一起正常,但是调用dw.SetRow(ll_RowNum)设置当前行后,数据窗口中的焦点并没有切换到ll_RowNum这一行上,但是调用dw.GetRow()后返回值又确实是ll_RowNum。调用一下dw.SetRedraw(True)或者MessageBox(...)之类的,行焦点就马上切换到ll_RowNum上了。但是这时在数据窗口中按上下方向键也没有反应,即使调用了dw.SetRedraw(True)。
    不知道这是不是DW的一个BUG,有遇到类似情况的朋友说说你们是怎么解决的。
Detail背景 行焦点

------解决方案--------------------
引用:
引用:dw.SetRow(ll_RowNum) 只是设置了getrow,但并没有设置 CurrentRow(),getrow()与currentrow()是不一样的
你看帮助呢,dw.SetRow()就是设置当前行的:
Sets the current row in a DataWindow control or DataStore.
 ……


也请你看一下currentrow的帮助。
------解决方案--------------------
引用:
引用:1、dw_1.setrow(ll_RowNum): 选中行的颜色的脚本会起作用;
2、如果数据多,出了滚动条,要想跳到ll_RowNum行上,加dw_1.scrolltorow(ll_RowNum);
3、焦点回到dw上,dw_1.setfocus( )

就是第1条没有起作用,我是把表达式写在Detail域上的,不是列上的,所以……


把你的完整代码贴出来。
IF(GetRow() = CurrentRow(), RGB(255, 0, 0), RGB(255, 255, 255)) 肯定没问题,11.5的各个小版本我都用过。

但是以下情况例外:所有的列的protect都设为1,或者taborder都设为0,setrow之后颜色不会变,鼠标随便点哪一下才会变,但是getrow返回行号是正确的。
  相关解决方案