SAPUI5:如何使用2个或更多值过滤数据

时间:2014-04-17 09:06:26

标签: sapui5

我目前正在尝试使用/在SAPUI5中的一些内容,并且我已经实现了一个非常简单的搜索:

    var filters = [];
    var query = evt.getParameter("query");
    if (query && query.length > 0) {
        var nameFilter = new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);

        filters.push(nameFilter);
    }

    var list = this.getView().byId("list");
    var binding = list.getBinding("items");
    binding.filter(filters);

现在我有以下问题:通过这个逻辑,我可以通过一个人的名字来搜索,或者更确切地说过滤。我还有一些其他领域,如年龄,性别等,我也希望搜索年龄或性别。 所以我试图创建第二个过滤器,比如" genderFilter",它正在使用"性别"领域。在此之后,使用.push()方法将第二个过滤器添加到过滤器[] ..但这不起作用。

我已经尝试过观看文档,看了不同的例子,尝试了不同的方式 - 但我无助。有人可以帮我解决这个问题吗?

9 个答案:

答案 0 :(得分:6)

对于要求,此代码将起作用。

var list = this.getView().byId("list");
var binding = list.getBinding("items");
if( !query ) {
    binding.filter( [] );
} 
else {
   binding.filter( [ new sap.ui.model.Filter([
      new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query ),
      new sap.ui.model.Filter("gender", sap.ui.model.FilterOperator.Contains, query )
   ],false)
]

答案 1 :(得分:3)

根据API

  

对于手动过滤,您应始终传递FilterType

如果您将代码更改为

 list.getBinding("items").filter(filters, sap.ui.model.FilterType.Application);

它应该有用。

另请参见最底部的https://openui5.hana.ondemand.com/docs/guide/BindingAggregations.html

答案 2 :(得分:3)

我用以下代码实现了这个目标: -

var oFilter = new sap.ui.model.Filter("name",sap.ui.model.FilterOperator.Contains,searchString);
var oFilter1 = new sap.ui.model.Filter("ID",sap.ui.model.FilterOperator.Contains,searchString);
var comFil = new sap.ui.model.Filter([oFilter,oFilter1]);
var oList = sap.ui.getCore().byId("dealerList");
oList.getBinding("items").filter(comFil,sap.ui.model.FilterType.Application);

答案 3 :(得分:1)

每个条件的filters数组中只有一个过滤器,它应该有效,

var filters = [];
var sFilter;
var query = evt.getParameter("query");
if (query && query.length > 0) {

    if(query == "name" )
    {
       sFilter = new sap.ui.model.Filter("name", sap.ui.model.FilterOperator.Contains, query);
    }
    else if(query == "gender")
    {
       sFilter = new sap.ui.model.Filter("gender", sap.ui.model.FilterOperator.Contains, query);
    }
     //and so on...

    filters.push(sFilter);
}

var list = this.getView().byId("list");
var binding = list.getBinding("items");
binding.filter(filters);

答案 4 :(得分:1)

我希望我把一切都做对了: 以下是将数据绑定到表时如何过滤多个列:

oTable.bindRows({
    path : "/modelData",
    filters:  [new sap.ui.model.Filter("severity", sap.ui.model.FilterOperator.EQ, '2'),
               new sap.ui.model.Filter("severity", sap.ui.model.FilterOperator.EQ, '3')]  
});

答案 5 :(得分:1)

组合多个过滤器,您可以这样编写过滤器:

new sap.ui.model.Filter({
    filters: [
    new sap.ui.model.Filter(col1, , ,val),
    new sap.ui.model.Filter(col2, , ,val)
    ],
    and: false
})

来源:https://sapui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.Filter.html#constructor

然后,您可以使用OR过滤多个列。

答案 6 :(得分:0)

我不得不同时使用它们。所以最后这对我有用。

var oFilters = new sap.ui.model.Filter({
                filters: [
                    oFilter,
                    oFilter2
                ],
                and: false
            });
evt.getSource().getBinding("items").filter(oFilters, sap.ui.model.FilterType.Application);

感谢您的帮助!

答案 7 :(得分:0)

<TableHeaderColumn dataField='effectiveDate' dataSort={true} dataFormat={dateFormatter}  >Effective Date</TableHeaderColumn>

答案 8 :(得分:0)

绑定两个或多个过滤器的简单方法。

var sQuery = oEvent.getParameter("value");
var oBinding = oEvent.getSource().getBinding("items");
oBinding.filter([
    new sap.ui.model.Filter("column A", sap.ui.model.FilterOperator.Contains, sQuery), 
    new sap.ui.model.Filter("column B", sap.ui.model.FilterOperator.Contains, sQuery)
]);