我正在开发旧版 PowerBuilder 应用程序,我们已升级到 PowerBuilder 12,但继续使用“经典”IDE。
我有一个网格 DataWindow 与一个自由格式 DataWindow 共享数据,它们都继承祖先,确保当网格中的当前行发生变化时,自由格式滚动到同一行。
我已经开始在自由格式的列控件的 Protect 和 Background.Color 属性上使用表达式来模拟启用/禁用,作为在 rowfocuschanged 上使用 DataWindow.Modify 的替代方法。
到目前为止,我很喜欢这种方法,它看起来更干净,并且没有明显的性能损失,因为我没有在任何表达式中访问数据库。
问题是,由于我很难确定的原因,这些表达式有时会导致上述行同步功能失败。
在我的测试场景中,网格中有两行。选择第 2 行不会导致自由格式滚动到第 2 行,尽管调试表明 ScrollToRow 确实被正常调用。然后我再次选择第 1 行,不能确定这是否有效,因为自由形式从未离开第 1 行。然后我第二次选择第 2 行,自由格式正确滚动到第 2 行,从此以后事情就变得很花哨了。
通过在一个特定的表达式中移动代码,我已经在另一个窗口上修复了这个问题,不知道为什么会这样,更改不会影响表达式的结果。不幸的是,我没有那么容易在我当前的窗口上修复它。到目前为止,我可以通过从一个特定的 DateTime EditMask 列中删除 Protect 表达式,或者将前面的 DateTime EditMask 列的 TabOrder 设置为正值来解决功能缺失的问题。第一列需要 Protect 表达式,第二列需要不可编辑。我试图给第二列一个正的 TabOrder,同时将它的 Protect 表达式设置为 1,但这不起作用。
我正在撕扯我的头发,并且讨厌 PowerBuilder 一些激烈的东西!如果有人知道问题是什么以及如何在避免它的同时继续利用列表达式,我将不胜感激。我不愿意回到通过从 rowfocuschanged 修改来操作这些东西。