SapUi5表多重过滤器

时间:2017-01-20 17:40:26

标签: sapui5

我正在使用sap.ui.table.Table开发一个sap ui5应用程序。

我需要应用基于多个字符串的过滤器。例如,如果用户输入是如下数组:

["Stack", "Overflow"]

我需要:

  1. "Stack";
  2. 过滤所有表格字段
  3. 1;
  4. 过滤点"Overflow"的结果

    结果将是包含"Stack""Overflow"的所有行,无论字段是什么。

    有没有人有解决方案?

2 个答案:

答案 0 :(得分:1)

根据sap.ui.model.Filter documentation,您可以根据过滤器信息对象或先前创建的过滤器数组创建过滤器。这允许我们执行以下操作:

  • 为第一个值创建过滤器(例如“Stack”)
  • 为第二个值创建过滤器(例如“Overflow”)
  • 创建一个包含这两个值的过滤器,并使用它来过滤表格。

让我们来看看一些代码。

// 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);

希望这会有所帮助。如果您有任何问题,请告诉我。

克里斯

答案 1 :(得分:0)

请在for循环中传递该数组并传递过滤器,如

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]));

}

它可能对您有所帮助。