Schultz’s PowerBuilder Notes

The ol’ Hidden Item in the Dddw Problem


I have a dddw which hides certain items by setting the row height for these hidden rows to 0. This allows the column for other rows to still display the non-selectable dddw rows. But by using the arrow key or hotkeys (first letter of the description) the user can still select these rows which have a height of zero.

To get around this, create a user-event and map it to pbm_command. In the example below, check if the column is bd_ty_cd. Then see if the dddw rfc event fires (IntHigh(message.wordparm) = 2048 ). Then do what you need to do to skip over an unselectable column.

Note: there is another way to deal with this issue without using row hiding or needing the pbm_command dddw event. This will be detailed in a future post. The Ol’ Hidden items in the dddw problem part II

//////////////////////////////////////////////////////////////////////////////
// Event: ue_command for dw_bd_job (pbm_command)
//
//    Description: User event for trapping dddw events
//
//    Arguments: long            hwndchild
//            unsignedinteger childid
//
//    Returns: none
//
//////////////////////////////////////////////////////////////////////////////
//    Revision History
//
// Date      By   Vers  Task   Description/Comments
// --------  ---  ----- ----   ---------------------------------------
// 10/25/04  fjs 98094  Initial Version
//
//////////////////////////////////////////////////////////////////////////////

datawindowchild ldwc_bind_style
integer         li_rc = SUCCESS, li_curr_dddw_row, li_bind_style, li_prev_bind_style

if li_rc = SUCCESS then
   if this.GetColumnName() <> "bd_tp_cd" then
      li_rc = NO_ACTION
   end if
end if

if li_rc = SUCCESS then
   // Verify that the event is RowFocusChanged
   if IntHigh(message.wordparm) <> 2048 then
      li_rc = NO_ACTION
   end if
end if

if li_rc = SUCCESS then
   // is the selected bind style visible in the bind_style dddw
   this.GetChild("bd_tp_cd", ldwc_bind_style)
   li_prev_bind_style = this.GetItemNumber(this.GetRow(), "bd_tp_cd" )
   li_curr_dddw_row = ldwc_bind_style.GetRow()

   li_bind_style = ldwc_bind_style.GetItemNumber(li_curr_dddw_row, "job_cntrl_cd" )

   // If the user is trying to select an item which should not be selectable,
   // with the arrow key or hotkey, select the next best acceptable item.
   if li_bind_style = 626 or li_bind_style = 629 then
      if NOT KeyDown(KeyUpArrow!) and NOT KeyDown(KeyDownArrow! ) then
         this.SetItem(this.GetRow(), "bd_tp_cd", li_prev_bind_style)
      end if
      if KeyDown(KeyUpArrow!) then
         li_bind_style = ldwc_bind_style.GetItemNumber(li_curr_dddw_row - 2, "job_cntrl_cd" )
         this.SetItem(this.GetRow(), "bd_tp_cd", li_bind_style)
      end if
      if KeyDown(KeyDownArrow!) then
         li_bind_style = ldwc_bind_style.GetItemNumber(li_curr_dddw_row + 2, "job_cntrl_cd" )
         this.SetItem(this.GetRow(), "bd_tp_cd", li_bind_style)
      end if
   end if
end if

May 15, 2008 - Posted by | Drop Down Data Window (DDDW) | , , , , , , , , , , ,

1 Comment »

  1. […] are a couple ways to deal with this.  The first way I learned is described here  The Ol’ Hidden Item in the dddw Part I.   But I much prefer a technique I learned a long time ago in a PBDJ article written by a fellow […]

    Pingback by The Ol’ Hidden Items in the Dddw Problem Part II « Schultz’s PowerBuilder Notes | November 16, 2008 | Reply


Leave a comment