行BGCOLOR设置为整个动态浏览,而不仅仅是1行

时间:2016-12-08 20:25:46

标签: browser dynamic openedge

在创建动态OpenEdge浏览时使用ROW-DISPLAY触发器。问题是,当显示数据时,所有行的BGCOLOR仅由LAST行的数据缓冲区内容确定。静态浏览从未遇到过这个问题。

浏览代码如下所示:

CREATE BROWSE l-browse-wh IN WIDGET-POOL "pool"

  ASSIGN X = 1
         Y = l-browse-y
         FONT = INT(get-fn("browsedat-fnt"))
         HEIGHT-PIXELS = l-h
         WIDTH-PIXELS = FRAME f-data:WIDTH-PIXELS - 20 
         QUERY = hQuery
         HIDDEN = FALSE
         ROW-HEIGHT-CHARS = 0.67
         READ-ONLY = FALSE
         ROW-MARKERS = FALSE
         SEPARATORS = TRUE
         COLUMN-RESIZABLE = TRUE
         COLUMN-SCROLLING = TRUE
         FIT-LAST-COLUMN = FALSE 
         SCROLLBAR-VERTICAL = FALSE
         FRAME = FRAME f-data:HANDLE
         VISIBLE = TRUE
         SENSITIVE = TRUE
  TRIGGERS:
  ON ROW-DISPLAY
     PERSISTENT RUN row-color-ip IN THIS-PROCEDURE.
  END TRIGGERS.

PROCEDURE row-color-ip:

DEF VAR l-bgcolor AS INT NO-UNDO.

IF tt-sold.t-exclude-sw  /* <-- always uses value from last browse row */
    THEN ASSIGN l-bgcolor = 8.
    ELSE ASSIGN l-bgcolor = 15.

FOR EACH tt-col-handles
    NO-LOCK:
    ASSIGN tt-col-handles.t-wh:BGCOLOR = l-bgcolor.
END.   /* of "FOR EACH tt-col-handles" */
END PROCEDURE.

1 个答案:

答案 0 :(得分:1)

它与您的代码(您未显示的部分)有关。我使用了10.2B Windows并复制了你的代码,填补了空白。正如我所料,这个小程序交替颜色。

DEFINE VARIABLE l-browse-wh AS HANDLE      NO-UNDO.
DEFINE VARIABLE hQuery AS HANDLE      NO-UNDO.
define temp-table tt-sold
field cod as int
field name as char
field t-exclude-sw as logical.

create query hQuery.
hQuery:set-buffers(temp-table tt-sold:default-buffer-handle).
hQuery:query-prepare('for each tt-sold').

define temp-table tt-col-handles
field i as int
field t-wh as handle.
create widget-pool 'pool'.
define frame f-data with size 75 by 20.
CREATE BROWSE l-browse-wh IN WIDGET-POOL "pool"
  ASSIGN X = 1
         width = 60
         height = 10
         QUERY = hQuery
         HIDDEN = FALSE
         ROW-HEIGHT-CHARS = 0.67
         READ-ONLY = FALSE
         ROW-MARKERS = FALSE
         SEPARATORS = TRUE
         COLUMN-RESIZABLE = TRUE
         COLUMN-SCROLLING = TRUE
         FIT-LAST-COLUMN = FALSE 
         SCROLLBAR-VERTICAL = FALSE
         FRAME = FRAME f-data:HANDLE
         VISIBLE = TRUE
         SENSITIVE = TRUE
  TRIGGERS:
  ON ROW-DISPLAY
     PERSISTENT RUN row-color-ip IN THIS-PROCEDURE.
  END TRIGGERS.

create tt-sold.
assign tt-sold.cod = 1 tt-sold.name = 'ABC' tt-sold.t-exclude-sw = yes.
create tt-sold.
assign tt-sold.cod = 2 tt-sold.name = 'DEF' tt-sold.t-exclude-sw = no.
create tt-sold.
assign tt-sold.cod = 3 tt-sold.name = 'GHI' tt-sold.t-exclude-sw = yes.
create tt-sold.
assign tt-sold.cod = 4 tt-sold.name = 'JKL' tt-sold.t-exclude-sw = no.



create tt-col-handles.
assign tt-col-handles.i = 1 tt-col-handles.t-wh = l-browse-wh:add-like-column('tt-sold.cod').
create tt-col-handles.
assign tt-col-handles.i = 2 tt-col-handles.t-wh = l-browse-wh:add-like-column('tt-sold.name').
create tt-col-handles.
assign tt-col-handles.i = 3 tt-col-handles.t-wh = l-browse-wh:add-like-column('tt-sold.t-exclude-sw').
hQuery:query-open(). 
l-browse-wh:refresh().
wait-for close of this-procedure.
PROCEDURE row-color-ip:

DEF VAR l-bgcolor AS INT NO-UNDO.

IF tt-sold.t-exclude-sw  /* <-- always uses value from last browse row */
    THEN ASSIGN l-bgcolor = 8.
    ELSE ASSIGN l-bgcolor = 15.

FOR EACH tt-col-handles
    NO-LOCK:
    ASSIGN tt-col-handles.t-wh:BGCOLOR = l-bgcolor.
END.   /* of "FOR EACH tt-col-handles" */
END PROCEDURE.

我为大块而道歉,但我无法将手指放在你出错的地方。也许这个例子会以某种方式帮助你。希望它有所帮助!