I think this could be done using dynamic dropdowns.
you are looking to have one list for customers, when a customer is selected, populate another list of possible states, when the state list is selected populate another list of possible cities. Is that correct?
In the first list, the customer name will be used for both the label and the value.
the recordset to populate the State Dynamic Array will be configured as:
SELECT customerName, state, CONCAT(customerName, '', state) AS custState FROM customers
in the Create Dynamic array behavior, set the customerName as the parent ID, custState as child ID and state as child label
the recordset for states will be created as
SELECT city, CONCAT(customerName, '', state) AS custState FROM customers
in the Create Dynamic array behavior, set the custState as the parent ID, city as child ID and city as child label
NOTE: In the create dynamic array behavior, you wont be able to select the aliased column that is created in the recordset, you will need to select a different column, then edit the code afterward to set it to use the aliased column.