Radio Button Table Lookup

Description

The Radio Button tab of the Table Lookups form contains two radio buttons. There are no field rules or choices defined in object properties. The implementation is based on Xbasic code as follows.

Items: 

  • Tabbed2 

    This event refreshes the list of Vendors when the user arrives at the Event Driven tab. The code retrieves a list of Vendors, counts the number of records, and limits the list to a maximum of 7 items (because of the size of the area allocated to radio buttons).

    OnTabChange
  • Table_Lookups 

    This event refreshes the list of Products when the user reads a new record. The script calls a function named Refresh_Products().

    OnFetch
  • Vendor 

    This event refreshes the list of Products when the user selects a different vendor. The script calls a function named Refresh_Products().

    OnChange
  • Refresh_Products() 

    This function receives pointers to the Vendor and Product radio button objects. It uses this information to retrieve the appropriate list of Product_Name fields. It limits the list to a maximum of 7 items.

Tabbed2 OnTabChange Event 

dim cFieldList as C
dim nCounter as N
dim nRecordCount as N
dim cWord as C
' Get the CR-LF delimited list
cFieldList = table.external_record_content_get("Vendor", \
"Vendor_Name + '|' + Vendor_No", "Vendor_Name", "")
' Parameter 1: "Vendor": From the Vendor table
' Parameter 2: "Vendor_Name + '|' + Vendor_No": Two fields
' separated by a pipe character
' Parameter 3: "Vendor_Name": sorted on the Vendor_Name
' field
' Parameter 4: "": no filter required
' Get the number of records returned
nRecordCount = w_count(cFieldList, crlf())
' Limit the number of records to 7 because of the limited amount of space on the form
nRecordCount = min(7, nRecordCount)
' Exit if no records
if (nRecordCount = 0) then
    end
end if
' redimension the vendor lookup list to nRecordCount items
vendor.choice.list.redim(nRecordCount)
' for each of the records
for nCounter = 1 to nRecordCount
    ' retrieve a line of data delimited by a CR-LF
    cWord = word(cFieldList, nCounter, crlf())
    ' retrieve the value that we save, which is the second word on the line
    vendor.choice.listnCounter.value = word(cWord, 2, "|")
    ' retrieve the text that we display as the radio button label
    vendor.choice.listnCounter.text = word(cWord, 1, "|")
next nCounter

Vendor OnChange Event 

dim vendor_ptr as P
dim product_ptr as P
dim nRecordCount as N
' create pointers to the two radio buttons
vendor_ptr = Vendor.this
product_ptr = Product.this
' call the function that refreshes the product radio button
nRecordCount = refresh_products(vendor_ptr, product_ptr)

Table Lookups OnFetch Event 

dim vendor_ptr as P
dim product_ptr as P
dim nRecordCount as N
' create pointers to the two radio buttons
vendor_ptr = Vendor.this
product_ptr = Product.this
' call the function that refreshes the product radio button
nRecordCount = refresh_products(vendor_ptr, product_ptr)

Refresh_Products() function 

' The function receives pointers to Vendor and Product
FUNCTION Refresh_Products as C (Vendor as P, Product as P)
dim cFieldList as C
dim nCounter as N
dim nRecordCount as N
dim cWord as C
dim cVendor as C
' Get the current value of the vendor radio button
cVendor = Vendor.value
' Get the CR-LF delimited list
cFieldList = table.external_record_content_get("Product",\
"Product_Name + '|' + Product_No","Product_Name",\
"Product_Vendor_No = " + quote(cVendor))
' Parameter 1: "Product": From the Product table
' Parameter 2: "Product_Name + '|' + Product_No": Two
' fields separated by a pipe character
' Parameter 3: "Product_Name": sorted on the Product_Name
' field
' Parameter 4: "Product_Vendor_No = " + quote(cVendor):
' vendor must match
' Get the number of records returned
nRecordCount = w_count(cFieldList,crlf())
' Exit if there are no records
if (nRecordCount = 0) then
    end
end if
' Limit the number of records to 7 because of the limited amount of space on the form
nRecordCount = min(7, nRecordCount)
' redimension the vendor lookup list to nRecordCount items
Product.choice.list.redim(nRecordCount)
' for each of the records
for nCounter = 1 to nRecordCount
' retrieve a line of data delimited by a CR-LF
cWord = word(cFieldList, nCounter, crlf())
' retrieve the value that we save, which is the
' second word on the line
Product.choice.listnCounter.value = word(cWord, 2, "|")
' retrieve the text that we display as the radio
' button label
Product.choice.listnCounter.text = word(cWord, 1, "|")
next nCounter
END FUNCTION

See Also