gpt4 book ai didi

delphi - 执行查询后如何挂接?

转载 作者:行者123 更新时间:2023-12-03 19:41:55 35 4
gpt4 key购买 nike

我正在使用AnyDac和TMS TAdvDbGrid(而不是普通的TDbGrid),以防万一,但我怀疑有一个通用的解决方案。

我有一个数据感知网格,由于屏幕大小,该网格最多应显示12行。如果关联的查询返回的行数少于12行,则我想相应地更改DB Grid的height属性(在新定位的网格下方而不是网格内留一些空白)。

如果需要,我可以发布该代码,但是我的问题是应该在哪个事件处理程序中进行处理?

我曾考虑过使用Query的AfterOpen()处理程序,但这从未被滥用。

那里还有什么?我可以使用数据库网格的DrawCell()方法,但是会经常调用它。



[更新]我添加了一些跟踪。我只按了一次主网格(它的OnClick()被调用了两次,但是我尝试了几次,这是一致的)。

这是跟踪:

2   00:00:25.225 [Detail grid scolled]  11:02:12 AM
2 00:00:25.228 [Detail grid scolled] 11:02:12 AM
2 00:00:25.229 [Detail grid scolled] 11:02:12 AM
2 00:00:25.231 [Detail grid scolled] 11:02:12 AM
2 00:00:25.233 [Detail grid scolled] 11:02:12 AM
2 00:00:25.234 [Clicked master grid] 11:02:12 AM
2 00:00:25.234 [Master grid scolled] 11:02:12 AM
2 00:00:25.325 [Clicked master grid] 11:02:12 AM


我注意到一些事情:


在将主网格重新填充为单击之前,将报告明细网格已滚动。我猜这只是Windows消息队列,但看起来确实很奇怪。
主网格报告被单击两次
那些2次单击似乎导致2套滚动。第一个报告滚动了5次;碰巧(?)在详细信息网格上有5列。如果还有更多内容,或者如果滚动处理很繁琐,那将是一项开销(而且我不了解设置和清除标志的足够知识)。理想情况下,我想钩住第二个“组”,只需单击一下即可,但我不知道该如何做。
我可以确认AfterScoll是一个好事件。仅当我单击不是当前行的主网格行(即,当详细网格的内容出现变化时)才调用它。


任何意见?



[更新++]

由于我使用的是AnyDac TADQuery,因此我发现可以分配 OrdersADQuery.Command.AfterOpen := OrdersADQueryAfterOpen;,并且在单击主网格的非当前行时,该函数将被完全调用一次。

这对我有用,但是如果您认为这对其他人有帮助,可以随意评论我以前的经历

最佳答案

尽管还有其他几种可能性,但根据我的经验,填充网格的数据集的AfterScroll事件是捕获行数等变化和数据集光标移动的最可靠的好地方。顺便说一句,您没有说是否要覆盖删除和插入内容。

关于delphi - 执行查询后如何挂接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628623/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com