2016-12-08 32 views
0

创建动态OpenEdge浏览时使用ROW-DISPLAY触发器。问题是,显示数据时,所有行都只有由最后一行的数据缓冲区内容确定的BGCOLOR。从来没有静态浏览这个问题。行BGCOLOR为整个动态浏览设置,而不仅仅是1行

浏览代码如下所示:

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

这件事情与您的代码(你不显示的部分)。我使用了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. 

我很抱歉为大块,但我不能只是把我的手指放在你要出错的地方。也许这个例子会以某种方式帮助你。希望能帮助到你!

相关问题