如何解决为什么我可以在浏览器中对列进行排序?
通常 StackOverflow 问题的形式是“我不知道如何做某事。”,但这个问题的形式是“我知道如何做某事,但我不明白它为什么有效。”。
更准确地说,我在常规窗口内点击浏览器的标题列,然后触发 MOUSE-SELECT-CLICK
事件,导致相应的列按升序或降序排序,如下所示源代码:
DEFINE broWSE browser-object
QUERY browser-object disPLAY
temp_table.Field1 FORMAT ... COLUMN-LABEL "Label1"
temp_table.Field2 FORMAT ... COLUMN-LABEL "Label2"
...
DEFINE VARIABLE L-logical-Field1 AS LOGICAL INITIAL TRUE.
DEFINE VARIABLE L-logical-Field2 AS LOGICAL INITIAL TRUE.
...
ON MOUSE-SELECT-CLICK OF temp_table.Field1 IN broWSE browser-object
DO:
IF L-logical-Field1
THEN OPEN QUERY browser-object FOR EACH temp_table BY temp_table.Field1.
ELSE OPEN QUERY browser-object FOR EACH temp_table BY temp_table.Field1 DESC.
L-logical-Field1 = NOT L-logical-Field1.
END.
ON MOUSE-SELECT-CLICK OF temp_table.Field2 IN broWSE browser-object
DO:
IF L-logical-Field2
THEN OPEN QUERY browser-object FOR EACH temp_table BY temp_table.Field2.
ELSE OPEN QUERY browser-object FOR EACH temp_table BY temp_table.Field2 DESC.
L-logical-Field2 = NOT L-logical-Field2.
END.
这是有效的:
当我点击列的标题时,列被排序。当我点击列中的其他地方时,没有任何反应。
但是为什么它有效?在源代码中,我写了单击 ANYWHERE 列时要执行的操作,我没有指定应单击标题列,但它仍然有效。
您可以说“是的,那又怎样?它可以工作,那有什么大不了的?”,但我担心稍后客户可能会要求我在某个元组上方单击该列并要求我编写一些行为用那个特定的元组做一些事情,我不知道如何开始。
有人有想法吗?
提前致谢
解决方法
要查看正在执行的内容,您可以使用条目类型为 log-manager
的 4glTrace
。
ON ALT-CTRL-H ANYWHERE DO:
IF LOG-MANAGER:LOGFILE-NAME = ? THEN DO:
LOG-MANAGER:LOGFILE-NAME = "4gltrace.log".
LOG-MANAGER:LOG-ENTRY-TYPES = "4GLTRACE:2".
MESSAGE "Started logging. Press Ctrl+Alt+H again to stop.":u VIEW-AS ALERT-BOX.
END.
ELSE DO:
LOG-MANAGER:CLOSE-LOG().
OS-COMMAND NO-WAIT VALUE( "4gltrace.log" ).
END.
RETURN NO-APPLY.
END.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。