Progress 11.2.1.
I'v got a library that you pass a temp table and a browse widget handle and it creates the columns and query dynamically. I can share how it works, but I don't believe it's necessary for the purposes of this question.
What I want to do is to enable one of the columns in this browse (I know what the columns are called because of the tt definition). I am having a complete mental block as to how to go about it though! Any ideas?
Thanks
So on the value-changed trigger I can loop through the columns in the browse looking for the one that matches the one I want to enable. So now I have a handle to the column. But enabled is not a valid property. And I can't find the doc for the browse column handle.
Thanks Brian. I've tried that one but it didn't seem to be working. I'll give it another go though and report back.
No that's not working. Very odd.
ON VALUE-CHANGED OF bro-MonthToDate IN FRAME FRA-BGTicker DO: DEFINE VARIABLE lv-i AS INTEGER NO-UNDO. DO lv-i = 1 TO BROWSE bro-MonthToDate:NUM-COLUMNS: IF bro-MonthToDate:GET-BROWSE-COLUMN(lv-i):NAME EQ "M2DSales" THEN DO: bro-MonthToDate:GET-BROWSE-COLUMN(lv-i):READ-ONLY = FALSE. MESSAGE "**JP**" bro-MonthToDate:GET-BROWSE-COLUMN(lv-i):READ-ONLY VIEW-AS ALERT-BOX. END. END. END.
PROCEDURE CreateBrowse: /*------------------------------------------------------------------------------ Purpose: Notes: ------------------------------------------------------------------------------*/ DEFINE INPUT PARAMETER ip-TableHandle AS HANDLE NO-UNDO. DEFINE INPUT PARAMETER ip-BrowseHandle AS HANDLE NO-UNDO. DEFINE VARIABLE lv-ColList AS CHARACTER NO-UNDO. IF VALID-HANDLE(lv-DefaultBufferHandle) THEN lv-DefaultBufferHandle:EMPTY-TEMP-TABLE(). EMPTY TEMP-TABLE tt-Columns. lv-RecordCount = 0. CREATE BUFFER lv-Buffer FOR TABLE ip-TableHandle:DEFAULT-BUFFER-HANDLE. FieldLoop: DO lv-i = 1 TO lv-Buffer:NUM-FIELDS: lv-Field = lv-Buffer:BUFFER-FIELD(lv-i). /* IF GetAttribute(lv-Field:HELP,"Display") EQ "No" THEN*/ /* NEXT FieldLoop. */ CREATE tt-Columns. ASSIGN tt-Columns.ColumnName = lv-Field:NAME tt-Columns.ColumnLabel = lv-Field:COLUMN-LABEL tt-Columns.ColumnFormat = lv-Field:FORMAT tt-Columns.OrigDataType = lv-Field:DATA-TYPE tt-Columns.DataType = IF GetAttribute(lv-Field:HELP,"DataType") NE "" THEN GetAttribute(lv-Field:HELP,"DataType") ELSE lv-Field:DATA-TYPE tt-Columns.ColumnOrder = lv-i tt-Columns.DisplayCol = GetAttribute(lv-Field:HELP,"Display") NE "No". END. IF VALID-HANDLE(lv-TTHandle) THEN DO: DELETE OBJECT(lv-TTHandle). lv-TTHandle = ?. END. CREATE TEMP-TABLE lv-TTHandle. FOR EACH tt-Columns BY tt-Columns.ColumnOrder: lv-TTHandle:ADD-NEW-FIELD(tt-Columns.ColumnName,tt-Columns.DataType,?,tt-Columns.ColumnFormat,?,tt-Columns.ColumnLabel,tt-Columns.ColumnLabel). END. lv-TTHandle:TEMP-TABLE-PREPARE("tt-" + ip-BrowseHandle:NAME). lv-DefaultBufferHandle = lv-TTHandle:DEFAULT-BUFFER-HANDLE. CREATE QUERY lv-Query. lv-Query:SET-BUFFERS(lv-Buffer). lv-QueryString = "FOR EACH " + ip-TableHandle:NAME. lv-Query:QUERY-PREPARE(lv-QueryString). lv-Query:QUERY-OPEN. DO WHILE lv-Query:GET-NEXT(): lv-RecordCount = lv-RecordCount + 1. lv-DefaultBufferHandle:BUFFER-CREATE. FOR EACH tt-Columns: IF tt-Columns.OrigDataType NE tt-Columns.DataType THEN DO: CASE tt-Columns.DataType: WHEN "CHARACTER" THEN lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = STRING(lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE). WHEN "DECIMAL" THEN lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = DEC(lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE). WHEN "INTEGER" THEN lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = INT(lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE). END CASE. END. ELSE lv-DefaultBufferHandle:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE = lv-Buffer:BUFFER-FIELD(tt-Columns.ColumnName):BUFFER-VALUE. END. END. lv-Query:QUERY-CLOSE. DELETE OBJECT lv-Query. CREATE QUERY lv-Query. lv-Query:SET-BUFFERS(lv-DefaultBufferHandle). IF lv-TheSortColumn NE "" THEN lv-QueryString = "FOR EACH " + lv-TTHandle:NAME + " BY " + lv-TTHandle:NAME + "." + lv-TheSortColumn + (IF lv-UpDown EQ "Down" THEN " DESC" ELSE ""). ELSE lv-QueryString = "FOR EACH " + lv-TTHandle:NAME. lv-Query:QUERY-PREPARE(lv-QueryString). ASSIGN ip-BrowseHandle:QUERY = lv-Query. FOR EACH tt-Columns WHERE tt-Columns.DisplayCol: tt-Columns.ColumnHandle = ip-BrowseHandle:ADD-LIKE-COLUMN(lv-TTHandle:NAME + "." + tt-Columns.ColumnName). END. lv-Query:QUERY-OPEN. IF lv-Query:NUM-RESULTS GT 0 THEN APPLY "VALUE-CHANGED" TO ip-BrowseHandle. ASSIGN ip-BrowseHandle:SENSITIVE = TRUE ip-BrowseHandle:COLUMN-MOVABLE = FALSE ip-BrowseHandle:ALLOW-COLUMN-SEARCHING = TRUE ip-BrowseHandle:COLUMN-RESIZABLE = TRUE. ON "START-SEARCH" OF ip-BrowseHandle PERSISTENT RUN "StartSearch" IN THIS-PROCEDURE (INPUT ip-BrowseHandle). RUN GenerateBrowsePopupMenu IN THIS-PROCEDURE (INPUT ip-BrowseHandle). IF lv-TheSortColumn NE "" THEN RUN RedoSort IN THIS-PROCEDURE (INPUT ip-BrowseHandle). END PROCEDURE.
Returns false.
I think you have to set READ-ONLY = FALSE on both the column and the browse itself.
Matt you are a star. That sorted it!
Thanks for everyone's help.
Unfortunately my brain block is still happening and I can't figure out how to go about capturing the user entered values in the browse so I can ultimately save them back to the database.
Thanks for everyone's help.
Unfortunately my brain block is still happening and I can't figure out how to go about capturing the user entered values in the browse so I can ultimately save them back to the database.
Flag this post as spam/abuse.
Thanks Brian. That's the one of course.