如何在Progress 4GL(OpenEdge ABL)中修改可更新Browse控件指定单元格背景色
在Progress 4GL(OpenEdge ABL)可更新Browse中修改特定单元格背景色
直接设置列的BGCOLOR属性只会生效第一个单元格,因为这是列的默认样式。要给满足条件的多个单元格单独上色,推荐用以下两种方法:
方法1:利用ROW-DISPLAY事件(动态渲染首选)
这个事件会在每行显示时触发,能针对每一行动态判断条件并设置单元格颜色,不管是初始加载还是数据更新后刷新都能自动生效。
示例代码
先给Browse绑定ROW-DISPLAY事件:
DEFINE BROWSE brsCustomer QUERY qryCustomer FOR Customer DISPLAY Customer.CustNum FORMAT "9999" Customer.Name Customer.Balance FORMAT "->>,>>9.99" ENABLE Customer.Balance // 开启可更新 ON ROW-DISPLAY OF brsCustomer DO: // 根据业务条件判断,比如余额超过1000的单元格标红 IF Customer.Balance > 1000 THEN brsCustomer:GET-BROWSE-COLUMN("Balance"):BGCOLOR = RGB(255, 204, 204). // 浅红色 ELSE brsCustomer:GET-BROWSE-COLUMN("Balance"):BGCOLOR = ?. // 恢复默认颜色 END.
数据更新后,调用刷新触发重新渲染:
// 更新单元格数据后执行 brsCustomer:REFRESH().
方法2:遍历行设置静态颜色(适合固定数据场景)
如果数据不会频繁变动,可以遍历所有行,手动给满足条件的单元格设置颜色:
// 遍历查询中的所有行 FOR EACH Customer IN qryCustomer: IF Customer.Balance > 1000 THEN DO: brsCustomer:SET-ROW(Customer). // 定位到当前行 brsCustomer:GET-BROWSE-COLUMN("Balance"):BGCOLOR = RGB(255, 204, 204). END. END. // 刷新Browse让颜色生效 brsCustomer:REFRESH().
重要提醒
- 不要直接给列设置
BGCOLOR,这只会应用到第一行,因为它是列的默认样式,而非行级样式。 - 用ROW-DISPLAY事件时,一定要在条件不满足时把颜色设为
?,避免旧颜色残留到其他行。 - 任何数据更新后都要调用
REFRESH(),触发行的重新渲染。
内容的提问来源于stack exchange,提问作者Abhinit Kumar Das
相关产品推荐
相关产品推荐

