sap.ui.table.Table。 删除记录后重复行

2020-08-19 10:31发布

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

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


您好社区,

我已经为这个问题苦苦挣扎了一段时间,而我的选项已用完了...希望我能在这里得到一些答案:)

我有一个非常简单的表格来管理到第三方网站的链接,就像这样:

此表的VisibleRowCount为3。

使用3个或更少的条目(没有滚动条)删除或添加链接就可以了,我的模型在更新后刷新,因此我的更改像应该的那样反映在表上。

当我有4条或更多记录时,就会出现问题,因此屏幕上会出现滚动条...

在表格中添加第4个链接后,我看到两种不同的行为:

1。 只要我显示第一行(测试1,滚动条一直向上),如果我删除Test1,Test2或Test3,在模型刷新后,我就会看到滚动条消失了,第四行现在变成了第三行。 一切都很好:

测试4是第4行,由于滚动条一直向上,现在不可见。

删除后:

2。 相反,如果滚动条一直向下(或在任何时候向下,如果我的表中有很多行),则行为如下:

现在例如删除Test4之后:

您可以看到Test4消失了,并且Test5已经向上移动,因此所有行现在都在显示中,但是滚动条仍然在那里。 但是,如果向上滚动使后端再次调用返回正确的行数,则屏幕上显示的是Test5的第4行,因此最后一行有重复。

如果我按任何列排序,或者关闭并打开我的应用程序,或插入另一条记录,则该行消失。

我真的很茫然,我看不出有什么问题。 这是一个非常简单的应用程序,在管理模型方面没有复杂的逻辑,也不会干扰任何奇怪的东西。 这是重要的部分:

//这是我的模型实例。 我在oData操作后没有做任何额外的模型刷新。
//行绑定是在XML视图上完成的
//模型绑定到视图,而不是直接绑定到表(尽管我已经尝试过)
 this.oModel =新的ODataModel(menu.util.utils.getSystemUrl(this.SERVICE_PATH + this.SERVICE_NAME),{
 json:是的,
 refreshAfterChange:是​​的,
 loadMetadataAsync:true,
 skipMetadataAnnotationParsing:是的,
 }); 
//我正在使用commitChanges插入我的新记录
 _submitChanges:function(){
 var that = this;
 var sMessages;

 如果(this.oModel.hasPendingChanges()){
 this.oModel.submitChanges({

 ...

//然后删除删除
 _delete:函数(oData){
 var that = this;
 this.oModel.remove(this.ENTITYSET_NAME +"(LinkId ='" + oData.LinkId +"')",{
 ...
 

我可能在这里错过了一些非常愚蠢的东西……但是我看不到!

如果需要,我可以添加更多详细信息。

编辑:我忘记添加所有后端调用都能按预期工作,并且数据维护正确。 另外,作为故障排除的一部分,我在oData调用中禁用了缓存。

提前谢谢!

(6.7 kB)

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

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


您好社区,

我已经为这个问题苦苦挣扎了一段时间,而我的选项已用完了...希望我能在这里得到一些答案:)

我有一个非常简单的表格来管理到第三方网站的链接,就像这样:

此表的VisibleRowCount为3。

使用3个或更少的条目(没有滚动条)删除或添加链接就可以了,我的模型在更新后刷新,因此我的更改像应该的那样反映在表上。

当我有4条或更多记录时,就会出现问题,因此屏幕上会出现滚动条...

在表格中添加第4个链接后,我看到两种不同的行为:

1。 只要我显示第一行(测试1,滚动条一直向上),如果我删除Test1,Test2或Test3,在模型刷新后,我就会看到滚动条消失了,第四行现在变成了第三行。 一切都很好:

测试4是第4行,由于滚动条一直向上,现在不可见。

删除后:

2。 相反,如果滚动条一直向下(或在任何时候向下,如果我的表中有很多行),则行为如下:

现在例如删除Test4之后:

您可以看到Test4消失了,并且Test5已经向上移动,因此所有行现在都在显示中,但是滚动条仍然在那里。 但是,如果向上滚动使后端再次调用返回正确的行数,则屏幕上显示的是Test5的第4行,因此最后一行有重复。

如果我按任何列排序,或者关闭并打开我的应用程序,或插入另一条记录,则该行消失。

我真的很茫然,我看不出有什么问题。 这是一个非常简单的应用程序,在管理模型方面没有复杂的逻辑,也不会干扰任何奇怪的东西。 这是重要的部分:

//这是我的模型实例。 我在oData操作后没有做任何额外的模型刷新。
//行绑定是在XML视图上完成的
//模型绑定到视图,而不是直接绑定到表(尽管我已经尝试过)
 this.oModel =新的ODataModel(menu.util.utils.getSystemUrl(this.SERVICE_PATH + this.SERVICE_NAME),{
 json:是的,
 refreshAfterChange:是​​的,
 loadMetadataAsync:true,
 skipMetadataAnnotationParsing:是的,
 }); 
//我正在使用commitChanges插入我的新记录
 _submitChanges:function(){
 var that = this;
 var sMessages;

 如果(this.oModel.hasPendingChanges()){
 this.oModel.submitChanges({

 ...

//然后删除删除
 _delete:函数(oData){
 var that = this;
 this.oModel.remove(this.ENTITYSET_NAME +"(LinkId ='" + oData.LinkId +"')",{
 ...
 

我可能在这里错过了一些非常愚蠢的东西……但是我看不到!

如果需要,我可以添加更多详细信息。

编辑:我忘记添加所有后端调用都能按预期工作,并且数据维护正确。 另外,作为故障排除的一部分,我在oData调用中禁用了缓存。

提前谢谢!

(6.7 kB)
付费偷看设置
发送
6条回答
木偶小白
1楼-- · 2020-08-19 10:47

如何确定选定的行?

告诉我您调用的代码

 _delete 
Climb_Ma
2楼-- · 2020-08-19 11:05

您好,

 deleteR:function(){
 var oOvTab = this.getView()。byId(" tabLinks");
 var oData = this.oModel.getProperty(oOvTab.getContextByIndex(oOvTab.getSelectedIndex())。sPath);
 this._delete(oData);
 },
 

deleteR是在按钮事件上触发的,我只是传递_delete oData路径,并在其中调用oData.remove函数。

成功后,我执行myTable.clearSelection(),因此删除后未选择任何行

 _delete:function(oData){
 var that = this;
 this.oModel.remove(this.ENTITYSET_NAME +"(LinkId ='" + oData.LinkId +"')",{
 成功:function(){
 var oOvTab = that.getView()。byId(" tabLinks");
//oOvTab.clearSelection();


 MessageBox.show("链接已成功删除",{
 图标:MessageBox.Icon.SUCCESS,
 标题:"成功",
 styleClass:" sapUiSizeCompact",
 操作:[MessageBox.Action.OK]
 });
 },
 错误:function(oError){
 var sMessages;
 $ .each(JSON.parse(oError.responseText).error.innererror.errordetails,function(i,data){
 如果(sMessages){
 sMessages = sMessages +" \ n \ n" + data.message;
 }其他{
 sMessages = data.message;
 }
 });
 MessageBox.error(sMessages);
 }
 });
 },
 

谢谢

d56caomao
3楼-- · 2020-08-19 11:02

什么是"

如果我向上滚动,则再次调用后端,返回正确的行数

"

如果加载了数据,又怎么打另一个电话?

My梦
4楼-- · 2020-08-19 10:56

这是一个oData模型,我将实例化粘贴到了我的帖子中:

该表是处理对后端的oData调用的表。 定义如下:

 
 

在任何情况下,在这种情况下,我都不处理任何手动调用后端的操作。

我已经创建了一个存储库,并将代码放在这里。 如果您可以看一下,那就太好了。

https://github.com/Tukutupap/HelpfulLinks

我非常感谢您在6月解决这个问题上所做的努力。

5楼-- · 2020-08-19 10:50

所以我还无法弄清楚这一点,我真的认为当有滚动条时控件出了点问题 目前,但到目前为止我还无法证明。

我继续做的是,而不是让表执行我自己控制的事情。 我在初始化时获取行,并在每次插入/删除/更新记录时手动刷新模型。

这很好用,但我真的很讨厌把这个问题解决...

谢谢大家!

compass1988
6楼-- · 2020-08-19 10:56

嗨,文森特,根据我的观察,您需要刷新模型,因为根据我的推断,酒吧将根据 表中的数据量,即在开始时如果有4条记录并且您删除了1条并且您没有刷新模型,则控件将"解释"您仍有4个寄存器并进行另一个调用,但是, 如果在检查时刷新并查看网络,您会注意到它会像这样/背面的那样调用背面/UtilityLinksRecordsSet/$ count,使计数现在变为3,并且不会显示更多的记录。

刷新:

我希望我对您有帮助,问候

一周热门 更多>