You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Progress 4GL动态Browse中为多行单元格设置颜色?

解决Progress 4GL动态Browse多行单元格上色问题

你的核心问题是直接修改列的BGCOLOR属性——这是全局列属性,只会影响当前显示的行,无法实现多行单元格的差异化上色。要针对特定行的特定单元格设置颜色,需要利用Browse的ROW-DISPLAY触发器结合单元格级的样式设置方法。

修正方案步骤

  1. 保留你现有列句柄存储的逻辑,用于后续遍历目标列;
  2. 给Browse绑定ROW-DISPLAY触发器,该触发器会在每一行显示前触发,正好用来处理单行的单元格样式;
  3. 在触发器中通过SET-CELL-BGCOLOR方法,针对满足条件的行设置指定列的背景色。

完整修正代码

/* DEFINITIONS - 保留原列句柄存储逻辑 */
DEFINE TEMP-TABLE ttField
  FIELD hHandle AS HANDLE
  FIELD cField AS CHARACTER.

/* 在Browse初始化过程中执行(比如procedure initialiseBrowse) */
DEF VAR hTemp AS HANDLE NO-UNDO.

hTemp = BROWSE {&BROWSE-NAME}:FIRST-COLUMN.

REPEAT:
  CREATE ttField.
  ASSIGN
    ttField.cField = hTemp:NAME
    ttField.hHandle = hTemp.

  IF VALID-HANDLE(hTemp:NEXT-COLUMN) THEN
    hTemp = hTemp:NEXT-COLUMN.
  ELSE LEAVE.
END.

/* 给Browse添加ROW-DISPLAY触发器,绑定到处理过程 */
BROWSE {&BROWSE-NAME}:ADD-TRIGGER("ROW-DISPLAY", "rowDisplayTrigger").

/* 核心:ROW-DISPLAY触发器处理过程 */
PROCEDURE rowDisplayTrigger:
  DEF VAR hBrowse AS HANDLE NO-UNDO.
  DEF VAR hBuffer AS HANDLE NO-UNDO.
  DEF VAR iRow AS INTEGER NO-UNDO.
  /* 替换为你的目标字段列表,用逗号分隔,比如"OrderStatus,Amount" */
  DEF VAR cTargetFields AS CHARACTER NO-UNDO INITIAL "FIELD-LIST".

  /* 获取当前Browse实例和对应的缓冲区 */
  hBrowse = THIS-PROCEDURE:HANDLE.
  hBuffer = hBrowse:QUERY:GET-BUFFER-HANDLE(1).
  iRow = hBrowse:CURRENT-ROW.

  /* 判断当前行是否满足上色条件,替换为你的业务逻辑 */
  IF /* 示例:hBuffer:BUFFER-FIELD("Status"):VALUE = "异常" */ TRUE THEN
  DO:
    /* 遍历目标列,设置对应单元格背景色 */
    FOR EACH ttField WHERE LOOKUP(ttField.cField, cTargetFields) > 0:
      hBrowse:SET-CELL-BGCOLOR(iRow, ttField.hHandle:COLUMN-NUMBER, 12).
    END.
  END.
  ELSE
  DO:
    /* 可选:不满足条件时恢复默认背景色 */
    FOR EACH ttField WHERE LOOKUP(ttField.cField, cTargetFields) > 0:
      hBrowse:SET-CELL-BGCOLOR(iRow, ttField.hHandle:COLUMN-NUMBER, ?).
    END.
  END.
END PROCEDURE.

关键说明

  • ROW-DISPLAY触发器:每一行即将显示时自动触发,确保逐行处理样式,避免仅第一行生效的问题;
  • SET-CELL-BGCOLOR方法:这是Progress专门用于设置单个单元格背景色的方法,参数依次为行号、列号、颜色值(12对应红色);
  • 行条件判断:通过Browse的CURRENT-ROW获取当前行号,再通过缓冲区hBuffer读取该行数据,实现精准的行筛选;
  • 临时表ttField:存储列的句柄和名称,方便快速遍历需要上色的目标列,无需重复遍历Browse的列集合。

内容的提问来源于stack exchange,提问作者AbsolutistK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:07:17