Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Updating ComboBoxItem optionDataSource

    I'm using SmartClient_v121p_2020-04-14_PowerEdition. I have a form with a ComboBoxItem defined, where the ComboBoxItem is backed by a client only DataSource. Upon load of the application, I query the DB and set the data in the DataSource. Example code below:

    Code:
    let comboDS = isc.DataSource.create({
       ID: "comboDS",
       field: [
          {name: "id", primaryKey: true},
          {name: "item_name"},
          {name: "category"}
       ],
       dataFormat: "json",
       clientOnly: true
    });
    
    let comboForm = isc.DynamicForm.create({
       ID: "comboForm",
       width: "100%",
       height: 30,
       fields: [
          {name: "selectItem", title: "Select item", defaultValue: defaultID, width: 200, editorType: "ComboBoxItem", completeOnTab: true, 
             addUnknownValues: false,  optionDataSource: comboDS, displayField: "item_name", valueField: "id", pickListWidth: 200, autoFetchData: true,
             changed: function(form, item, value) { // do something here }
          }
       ]
    });
    
    // Get data from DB
    let comboData = getFromDB();
    comboDS.setCacheData(comboData);
    This works as designed. I have a use case where the user can add another "item" in another part of the application. When this item gets successfully saved to the DB, I do the following, so that the user has the option to select that item and view details of it at a later time:

    Code:
    let newItem = {id: newID, item_name: newItemName, category: "someCategory"};
    comboDS.addData(newItem);
    This too works great. Note that I am obfuscating what the application actually does per my company policy, so what come next may not make sense, but it's a valid use case in this application. The use case is that the system behind the application can get "reset". When this happens, I need to clear out all of the "items" from the drop down list. Once the reset is complete, I need to re-initialize from the DB, at which point all of the "new items" that were added would not be there, so would need to be removed from the ComboBox.

    On reset, I tried to set the DataSource's cached data to an empty array to clear the ComboBox. This did not work. Also, when I tried to re-initialize from the DB (same as above), the list also did not update.

    Code:
    comboData.setCacheData([]);
    I read a post from 2012 in the forum that basically said that "Select items do not fully support having their optionDataSource modified at runtime....". https://forums.smartclient.com/forum...election-issue

    Is this still the case? Is there not a way to modify the optionDataSource at runtime?

    Thank you.

    #2
    You can clear out the data in the DataSource with setCacheData(), but this not automatically cause a ComboBoxItem to re-fetch, just as it would not happen if the data were updated on the server side (what a clientOnly DataSource simulates). Use comboBoxItem.fetchData() to cause a new data fetch.

    Comment

    Working...
    X