Kbase 21627: How To Properly Change the Background Color of a Browse Row?
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  2/27/2006 |
|
Status: Verified
GOAL:
How to properly change the background color of an entire record (row) displayed on a browse widget?
FACT(s) (Environment):
Progress 8.X
Progress 9.X
OpenEdge 10.x
FIX:
The code solution below takes a generic approach as far as the number of browse columns is concerned. It also aims at eliminating error (5906) which can result when using the browse widget's FIRST-COLUMN or NEXT-COLUMN Attribute in the ROW-DISPLAY trigger's code:
FIRST-COLUMN/NEXT-COLUMN cannot be queried within a ROW-DISPLAY
trigger for BROWSE <browse-name>. (5906)
NOTE: To run this code in Progress Version 8.X, you must make the browse widget updatable and also take out the reference to the EXPANDABLE Browser's attribute.
DEFINE VARIABLE viCounter AS INTEGER NO-UNDO.
DEFINE VARIABLE viNumCols AS INTEGER NO-UNDO.
DEFINE VARIABLE vhCurColHdl AS HANDLE NO-UNDO.
DEFINE VARIABLE vcColHandles AS CHARACTER NO-UNDO.
DEFINE QUERY empQuery FOR
Employee SCROLLING.
DEFINE BROWSE empBrowse
QUERY empQuery NO-LOCK DISPLAY
Employee.EmpNum FORMAT "zzzzzzzzz9":U
Employee.FirstName FORMAT "x(15)":U
Employee.LastName FORMAT "x(25)":U
Employee.Position FORMAT "x(20)":U
Employee.WorkPhone FORMAT "x(20)":U
Employee.VacationDaysLeft FORMAT ">>9":U WIDTH 20.4
WITH NO-ROW-MARKERS SEPARATORS SIZE 119 BY 6.19 EXPANDABLE.
DEFINE FRAME DEFAULT-FRAME
empBrowse AT ROW 3.14 COL 1
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 1 ROW 1
SIZE 130 BY 16.
CURRENT-WINDOW:WIDTH = 150.
ON ROW-DISPLAY OF empBrowse IN FRAME DEFAULT-FRAME
DO:
RUN changeRowColor(14).
END.
RUN storeColHandles.
ENABLE ALL WITH FRAME DEFAULT-FRAME.
OPEN QUERY empQuery
FOR EACH Employee NO-LOCK INDEXED-REPOSITION.
WAIT-FOR CLOSE OF THIS-PROCEDURE.
PROCEDURE changeRowColor :
DEFINE INPUT PARAMETER piColor AS INTEGER NO-UNDO.
ASSIGN viNumCols = NUM-ENTRIES(vcColHandles).
IF employee.vacationDaysLeft > 3 THEN
DO viCounter = 1 TO viNumCols:
ASSIGN vhCurColHdl = WIDGET-HANDLE(ENTRY(viCounter,vcColHandles))
vhCurColHdl:BGCOLOR = piColor.
END.
END PROCEDURE.
PROCEDURE storeColHandles :
ASSIGN vhCurColHdl = BROWSE empBrowse:FIRST-COLUMN.
DO WHILE VALID-HANDLE(vhCurColHdl):
ASSIGN vcColHandles = IF vcColHandles <> "":U THEN
vcColHandles + ",":U + STRING(vhCurColHdl)
ELSE
STRING(vhCurColHdl)
vhCurColHdl = vhCurColHdl:NEXT-COLUMN.
END.
END PROCEDURE.