cancel
Showing results for 
Search instead for 
Did you mean: 

I can't filter a table by the value taken from a ComboBox

emorales
Explorer
0 Kudos
206

Hello community! First of all, thank you very much for reading me. I'm having a problem that is surely very simple but I can't find the reason for what is happening. I have a ComboBox like this:

<ComboBox
    items="{path:'/TipoAuditoria'}"
    selectedKey="{filters>TiposDeAuditoria}"
    selectionChange="onSubmitFilter"
    enabled="{= !${viewModel>/hasUIChanges}}"
>
    <items>
        <core:Item key="{ID}" text="{DESCRIPCION}" />
    </items>
</ComboBox>

 In the controller my filtering logic is as follows:

onSubmitFilter: function (oEvent) {
    const sValue = oEvent.getSource().getValue(); // Input value
    const sKey = oEvent.getSource().getSelectedKey(); // ComboBox value

    let oView = this.getView();
    let oModel = oView.getModel("filters");
    oModel.setProperty("/AuditoriaDescripcion", sValue);
    oModel.setProperty("/TiposDeAuditoria", sKey);

    // Filter logic
    let sAuditoria = oModel.getProperty("/AuditoriaDescripcion");
    let sTiposDeAuditoria = oModel.getProperty("/TiposDeAuditoria");
    let aFilters = [];

    if (sAuditoria) {
        aFilters.push(new Filter("DESCRIPCION", FilterOperator.Contains, sAuditoria));
    }

    if (sTiposDeAuditoria) {
        aFilters.push(new Filter("TIPOAUDITORIA_ID", FilterOperator.EQ, sTiposDeAuditoria));
    }

    this._oAuditoriaTable.getBinding("items").filter(aFilters);
}

Filtering doesn't work, the "getSelectedKey()" method doesn't seem to bring me any value. I don't know what mistake I'm making. I'm sharing the "filters" model just in case:

_loadFilters: function () {
    const oViewModelFilters = new JSONModel({
        AuditoriaDescripcion: "",
        TiposDeAuditoria: ""
    });

    this.getView().setModel(oViewModelFilters, "filters");
}

I appreciate the help, I need this to finish my view. Thanks!

View Entire Topic
Akhilesh_u
Discoverer
0 Kudos

Hi,

I think you are passing combobox fields ID and DESC to table data, whereas DESC field is not there in your table data and this DESC filter causing the issue, pass ID only to filter. Also this ID value should be there in your table data in a respective field.

//remove below filter, because DESCRIPTION field is from combobox model not from table model
    if (sAuditoria) { 
        aFilters.push(new Filter("DESCRIPCION", FilterOperator.Contains, sAuditoria));
    }

//value of ID field from combobox model should be there in the field TIPOAUDITORIA_ID of table model 
    if (sTiposDeAuditoria) { 
        aFilters.push(new Filter("TIPOAUDITORIA_ID", FilterOperator.EQ, sTiposDeAuditoria));
    }

I have prepared working solution for this scenario, Check this link 

Hope this helps.