下拉数据窗口显示列行为与过滤器

Dropdown datawindow display column behavior versus filter

我有一个包含 x 行的数据窗口。第一列——我称之为 "employee"——是一个下拉数据窗口,其中数据列指向员工 ID 字段,显示列指向员工姓名字段。添加行时,此列根据用户的下拉列表 selection 进行填充。此外,过滤器应用于员工列的 DatawindowChild,因此用户可能不会 select 与当前过滤器不匹配的员工。

问题:

当过滤器表达式发生变化,不再匹配现有行时,员工列将无法再引用当前员工 ID 的显示值,因为相应的行位于下拉数据窗口的过滤器缓冲区中。结果是显示数据值。

什么是明智的解决方法?

另外,要考虑的另一件事是我不能将匹配过滤器应用于主数据窗口,因为其中一个要求是所有行始终保持可见。

提前致谢。

编辑:Powerbuilder 2017 R2。

先试试这个取消过滤子数据窗口,每次都应用新的过滤器。

因此,在尝试了所有我能想到的使用过滤器的技巧之后,我最终选择了一个混乱的解决方案,该解决方案部分地颠覆了数据窗口的行为,但有效。

我推断,解决因下拉数据窗口中的选择table 值与列中输入的实际值不匹配而导致的显示问题的唯一方法是确保永远不会实际发生不匹配。

我创建了一个新的员工下拉数据窗口列,其中显示列和数据列都指向员工姓名字段。用户选择员工姓名,然后在必要时使用 Find 和 GetItemString 从数据窗口子项中手动获取员工 ID。结果是下拉数据窗口不再能够操作数据——这现在必须在代码中手动完成——但修改过滤器表达式时现有行没有视觉上的变化。

之前:

ls_employee = dw_1.GetItemString(row, "employee") //Returns employee ID

之后:

ls_employee = dw_1.GetItemString(row, "employee") //Returns employee name
ls_employee = ldwc_employee.GetItemString(ldwc_employee.Find("employee_name = '" + ls_employee + "'", 1, ldwc_employee.RowCount()), "employee_id") //Find row number and fetch ID

然后,由于用户实际上不再将 PK/FK 值插入 table,因此必须在调用更新之前在旧(隐藏)员工 ID 列上手动设置员工 ID .

dw_1.SetItem(row, "employee_id", ls_employee)

我对这个解决方案不是很满意,因为它使使用下拉数据窗口变得毫无意义。它也无法解释如果两名员工恰好具有相同的名字和姓氏,则查找可能 return 错误行号的情况,但在我的情况下是 acceptable 因为这些情况极不可能永远不会发生。

所以我并不以此为荣,但无论如何它就在那里。