SelectedKey ComboBox项目中的默认筛选器表

2020-09-03 21:18发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我有一个要求,我在组合框中有一个默认的选定值,我需要根据其值过滤表。 但是表格位于对话框中,该对话框在应用程序中通过片段进行调用。

现在的问题是,当我打开对话框时,它显示的是整个数据而不是已过滤的数据,并且如果我更改了组合框的值,则表将被过滤。 但是我需要在对话框打开时,根据默认的选定值对表格进行过滤。

我尝试了以下代码:

 var defaultItem = this.getView()。byId(" Combobox1")。getSelectedKey();
 var oTableMessage = oView.byId(" messageTable");
 var binding = oTableMessage.getBinding(" items");
         var aFilter = [];
 如果(defaultItem){
 如果(defaultItem ===" B"){
 aFilter.push(new Filter(" msg_type",FilterOperator.EQ,defaultItem));
 }
 }
 更新表绑定
    binding.filter(aFilter [0],sap.ui.model.FilterType.Application);
 

当我们第二次打开对话框时,上面的代码有效。 当我调试时,我发现第一次打开对话框时绑定是未定义的。

请帮助并建议我如何将过滤后的数据绑定到对话框表,或者建议该方法,因为它确实很紧急。

感谢帮助。

谢谢

最好的问候

Raina

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


尊敬的专家,

我有一个要求,我在组合框中有一个默认的选定值,我需要根据其值过滤表。 但是表格位于对话框中,该对话框在应用程序中通过片段进行调用。

现在的问题是,当我打开对话框时,它显示的是整个数据而不是已过滤的数据,并且如果我更改了组合框的值,则表将被过滤。 但是我需要在对话框打开时,根据默认的选定值对表格进行过滤。

我尝试了以下代码:

 var defaultItem = this.getView()。byId(" Combobox1")。getSelectedKey();
 var oTableMessage = oView.byId(" messageTable");
 var binding = oTableMessage.getBinding(" items");
         var aFilter = [];
 如果(defaultItem){
 如果(defaultItem ===" B"){
 aFilter.push(new Filter(" msg_type",FilterOperator.EQ,defaultItem));
 }
 }
 更新表绑定
    binding.filter(aFilter [0],sap.ui.model.FilterType.Application);
 

当我们第二次打开对话框时,上面的代码有效。 当我调试时,我发现第一次打开对话框时绑定是未定义的。

请帮助并建议我如何将过滤后的数据绑定到对话框表,或者建议该方法,因为它确实很紧急。

感谢帮助。

谢谢

最好的问候

Raina

付费偷看设置
发送
4条回答
zhangjiyang1323
1楼 · 2020-09-03 21:56.采纳回答

大家好,

感谢您的回答,我通过以下方式解决了问题:

使用smartTable的beforeRebindTable事件,在该事件中,我根据选择对组合框的数据进行过滤并将其绑定到表。 然后,在更改组合框的选择时,我将重新绑定表。

smartTable的beforeRebindTable事件

 onBeforeRebindTable:function(oEvent){
 var defaultItem = this.getView()。byId(" Combobox1")。getSelectedKey();
 var binding = oEvent.getParameter(" bindingParams");

 如果(defaultItem){
 如果(defaultItem ===" B"){
 binding.filters.push(new Filter(" msg_type",FilterOperator.EQ,defaultItem));
 }否则,如果(defaultItem ===" T"){
 binding.filters.push(new Filter(" msg_type",FilterOperator.EQ,defaultItem));
 }否则,如果(defaultItem ===" S"){
 binding.filters = [];
 }
 }
 },
 

并且在选择更改时-下拉的更改事件:

 onChange:function(oEvent){
 this.byId(" MeldungenSmartTable")。rebindTable();
 },
 
半个程序猿
2楼-- · 2020-09-03 21:30

您好, Raina Goyal

那里 可能有两个原因:

1)您的ComboBox没有与值绑定,并且(defaultItem)空白被传递给过滤器数据...,并且作为输出返回了所有Items。

设置组合框值以过滤参数onAfterRendering事件。

 onAfterRendering:function(){
//this._updateText(oCalendar);
 var txt1 = this.byId(" selectedDate");
 txt1.setText(this.byId(" selTrainee")。getSelectedKey());
 },
 

您也可以尝试在同一onAfterRendering事件中加载Fragment。

希望这对您有所帮助。

感谢-

Abhishek

clever101
3楼-- · 2020-09-03 21:46

您好莱娜·果阿(Raina Goyal)

在绑定发生之前,您正在传递过滤器值。 因此,使用updateFinished(在发生表绑定后将自动调用此事件)事件将过滤器参数添加到表中

希望这会有所帮助,

Raghavendra

Climb_Ma
4楼-- · 2020-09-03 21:34

嗨,

我在应用程序中遇到了同样的问题。

这是我做的:

 this.byId(" listOrgMembers")。getBinding(" items")。attachEvent(" dataReceived",this.orgMembersLoaded.bind(this)); 

您必须将事件" dataRecieved"附加到您的控件(在我的情况下为列表):

 <列表id =" listOrgMembers" selectionChange =" onChangeOrgMemberSelection" mode =" MultiSelect">
 
  

然后定义一个方法(在我的示例中为" orgMembersLoaded"),在其中过滤表。

不要忘记添加" .bind(this)"。

这应该有效;-)

一周热门 更多>