2017-01-20 4 views
0

Я разрабатываю приложение sap ui5, используя sap.ui.table.Table.SapUi5 Таблица Multiple Filter

Мне нужно применить фильтр на основе нескольких строк. Например, если пользовательский ввод представляет собой массив, как:

["Stack", "Overflow"] 

мне нужно:

  1. Фильтр всех полей таблицы по "Stack";
  2. Отфильтровать результат 1 от "Overflow";

Результатом будут все строки, которые имеют "Stack" и "Overflow", вне зависимости от области.

У кого-нибудь есть решение?

+0

Возможный дубликат [Фильтр с "или" и "и" условия для нескольких полей] (https://stackoverflow.com/questions/42433200/filter-with-or-and-and-conditions-on-multiple- поля) – boghyon

ответ

1

Согласно sap.ui.model.Filter documentation, вы можете создать фильтр либо на основе информационного объекта фильтра, либо из массива ранее созданных фильтров. Это позволяет нам сделать следующее:

  • Создать фильтр для первого значения (например, «стек»)
  • Создание фильтра для второго значения (например, «Переполнение»)
  • Создать фильтр, который содержит оба этих значения и использует его для фильтрации таблицы.

Давайте посмотрим на некоторый код.

// We will only display rows where ProductName contains 
// "Stack" AND CustomerName equals "Overflow" 

var oFilterForProductName, 
    oFilterForCustomerName, 
    aArrayWhichContainsBothPreviousFilters = [], 
    oFilterToSetOnTheTable; 

var sValueToFilterTheProductNameOn = "Stack", 
    sValueToFilterTheCustomerNameOn = "Overflow"; 

var sKeyForProductNameInTheTableModel = "ProductName", 
    sKeyForCustomerNameInTheTableModel = "CustomerName"; 

var oTableToFilter = this.byId("myTableId"); 

// Step 1: create two filters 
oFilterForProductName = new sap.ui.model.Filter(
    sKeyForProductNameInTheTableModel, 
    sap.ui.model.FilterOperator.Contains, 
    sValueToFilterTheProductNameOn); 
oFilterForCustomerName = new sap.ui.model.Filter(
    sKeyForCustomerNameInTheTableModel, 
    sap.ui.model.FilterOperator.EQ, 
    sValueToFilterTheCustomerNameOn); 

// Step 2: add these two filters to an array 
aArrayWhichContainsBothPreviousFilters.push(oFilterForProductName); 
aArrayWhichContainsBothPreviousFilters.push(oFilterForCustomerName); 

// Step 3: create a filter based on the array of filters 
oFilterToSetOnTheTable = new sap.ui.model.Filter({ 
    filters: aArrayWhichContainsBothPreviousFilters, 
    and: true 
}); 

oTableToFilter.getBinding("items").filter(oFilterToSetOnTheTable , sap.ui.model.FilterType.Application); 

Надеюсь, это поможет. Дайте знать, если у вас появятся вопросы.

Chris

0

Пожалуйста, передайте этот массив в цикл и передать фильтры, как,

var tableId = this.byId("oTable"); 
for(var i=0;i < array.length ; i++) 
{ 
    oTable.getBinding().filter(new sap.ui.model.Filter("", sap.ui.model.FilterOperator.Contains, array[0])); 

} 

это может быть полезно для вас.

Смежные вопросы