Results 1 to 3 of 3

Thread: [Answers] Choice

  1. #1
    Lianja MVP
    Join Date
    Dec 2012
    Location
    Croatia, Zagreb
    Posts
    1,135

    [Answers] Choice

    Q:
    combo box appear in a grid cell. After double clicking the column header, I have set the choices attribute to {1,2,3,4}.
    A:
    remove the {}



    Dynamic choice lists are choice lists based on data from a table, from a SQL SELECT, so they are dependent on the current data. Static choice lists are comma-separated hard-coded lists like 'apples,pears,bananas'.



    Q:
    In the Data Dictionary for a field I entered Choices as: M,D,Q
    But this doesn't seem to be used anywhere?
    Choices does work when entered for a grid column attribute or a field attribute.
    How can I get the Data Dictionary Choices to be used everywhere instead?
    A:
    It will be picked up in Form Sections if you check the Inherit dictionary rules under Other Options in the Section Attributes. Fields also have an Inherit dictionary rules Attribute, which is checked True by default.
    This functionality is not currently available in Grid Sections.
    The default settings were debated, it was decided this way (fields Inherit true by default, overridden by the section Inherit false by default) because if you are using the dictionary, you just need to check 1 attribute for the section, but if you are not using the dictionary and have just changed some captions or added some tooltips your changes are not overwritten by dictionary values.
    Can Inherit be set using code?
    You can't currently do it programmatically. Why not create a Template of a Form Section with the flag set and use that as your default Form Section?



    Choicelists had an enhancement added to them so that if the SQL SELECT started with a + then a blank entry was added as the first entry in the list.
    +SELECT omschrijving FROM titel ORDER BY omschrijving



    All topics in [Answers] alphabetically: http://www.lianja.com/community/show...ll=1#post12352
    Last edited by josipradnik; 2016-03-02 at 03:13.

  2. #2
    Lianja MVP
    Join Date
    Dec 2012
    Location
    Croatia, Zagreb
    Posts
    1,135
    You can specify a SQL SELECT statement in the choices attribute.
    Code:
    +select companyname from customers
    Put a + at the start of the statement will add a blank entry to the list.



    All topics in [Answers] alphabetically: http://www.lianja.com/community/show...ll=1#post12352
    Last edited by josipradnik; 2016-03-02 at 03:10.

  3. #3
    Lianja MVP
    Join Date
    Dec 2012
    Location
    Croatia, Zagreb
    Posts
    1,135
    Q:
    The choiceList ('Choices') attribute for fields and grid columns can now be specified as a macro expression "{myproc('arg',...}" that will be expanded in desktop, web and mobile.
    It looks to me like the choices field is picking up the value as a literal (unless I am doing it wrong) and not running the macro.

    You can always use a custom control though.
    For example, here is a custom control that conditionally lists the drop down choices based on employeeid.



    The code is here -
    I just create a container, add a readonly textbox and a combobox.
    You can see the conditional logic in the proc.

    Code:
    proc customChoices(empid)
    
      mycontainer = createObject("container")    
      mycontainer.layout = 1
      mycontainer.autosize = 1
      mycontainer.backcolor = "blue"
      mycontainer.addobject("mytext","textbox")
      mycontainer.addobject("cellcombo","combobox")
      mytext.value = extension
      mytext.readonly=.t.
      if empid <5
        cellcombo.additems("one,two,three")
      else
        cellcombo.additems("Four,Five,Six")
      endif
    
    return mycontainer 
    endproc
    Also in my app, if I put some function in the "choice" delegate, Lianja return the name of the function..

    A:
    This is what you will see if you have an error in your dynamicchoice proc/func.
    I am guessing you were making the same mistake I made with the choice list.
    It has to return a comma seperated list.

    The documentation is using the sqlvalues built in function to create a list based on the query.
    This is now working for me.

    Code:
    proc dynamicchoice()
    
      sqlvalues("select postalcode from employees")
      myvals = astring(_sqlvalues)
      return myvals
    endproc


    As with any custom section, you create your controls in classes, then use them.

    In this example, I first subclass combobox as fabiocombo and add the valid event as a proc.

    Code:
    define class fabiocombo as combobox
    
      proc valid()
        Lianja.showMessage("Valid was fired")
      endproc
    
    enddefine
    
    proc customChoices(empid)
    
      mycontainer = createObject("container")    
      mycontainer.layout = 1
      mycontainer.autosize = 1
      mycontainer.backcolor = "blue"
      mycontainer.addobject("mytext","textbox")
      mycontainer.addobject("cellcombo","fabiocombo")
      mytext.value = extension
      mytext.readonly=.t.
      if empid <5
        cellcombo.additems("one,two,three")
      else
        cellcombo.additems("Four,Five,Six")
      endif
    
      return mycontainer 
    endproc


    All topics in [Answers] alphabetically: http://www.lianja.com/community/show...p?2717-Answers

Bookmarks

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Journey into the Cloud
Join us