delphi – 为什么TDBGrid上的垂直滚动条没有显示?
我在表单上有两个DB网格,一个有垂直滚动条而另一个没有,即使DataSource查询返回的结果多于Grid的可见行.
为什么TDBGrid上的垂直滚动条没有显示? [更新] Delphi XE2启动程序,使用AnyDac. 当我第一次启动程序时,DB网格确实有一个垂直滚动条,但后来它消失了,我缩小了它,但仍然无法理解如何纠正问题. 我有两个MySql表和两个DBgrids.一个是所有测试运行的概述,另一个是测试运行期间测量的详细信息.当用户单击“摘要”网格的一行时,我更新“详细信息”网格的查询参数.这有效,但不会删除滚动条. 当我开始一个新的tets运行并在“summary”表中插入一个新行时,问题出现了 – “details”表的滚动条消失了! mysql> describe test_runs; +------------------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+-------------+------+-----+-------------------+----------------+ | run_id | int(11) | NO | PRI | NULL | auto_increment | | start_time_stamp | timestamp | NO | | CURRENT_TIMESTAMP | | | end_time_stamp | timestamp | YES | | NULL | | | description | varchar(64) | YES | | NULL | | +------------------+-------------+------+-----+-------------------+----------------+ 4 rows in set (0.02 sec) mysql> describe measurements; +------------------------+-----------+------+-----+-------------------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------------+-----------+------+-----+-------------------+-------+ | run_id | int(11) | NO | MUL | NULL | | | measurement_time_stamp | timestamp | NO | | CURRENT_TIMESTAMP | | | ph | float | NO | | NULL | | | conductivity | float | NO | | NULL | | | cod | float | NO | | NULL | | +------------------------+-----------+------+-----+-------------------+-------+ 5 rows in set (0.04 sec) mysql> AnyDac查询分别是 SELECT run_id,start_time_stamp,end_time_stamp,CONCAT(CONCAT(CONCAT(CONCAT(LPAD(EXTRACT(HOUR FROM timediff(end_time_stamp,start_time_stamp)),2,'0'),":"),LPAD(EXTRACT(MINUTE FROM timediff(end_time_stamp,LPAD(EXTRACT(SECOND FROM timediff(end_time_stamp,'0'))) AS duration,description FROM test_runs ORDER BY start_time_stamp DESC 和 SELECT run_id,measurement_time_stamp,ROUND(ph,:float_precision) as ph,ROUND(conductivity,:float_precision) as conductivity,ROUND(cod,:float_precision) as cod FROM measurements WHERE run_id=:run_id ORDER BY measurement_time_stamp DESC 如您所见,测量表中引用了test_runs表 当我执行以下SQL时,测量表的滚动条消失: INSERT INTO test_runs (start_time_stamp,description) VALUES (CURRENT_TIMESTAMP,"<Currently running test>"); SELECT LAST_INSERT_ID() AS run_id 能不能告诉我我做错了什么?谢谢你的0x000F4240 [更新]问题是,当我向test_runs表添加一行时,反映测量表查询的DB网格的垂直滚动条消失了. 因此,不知何故,一个DB网格/数据集/表正在影响otherDB网格. 实际的MySql数据库中的数据很好. 数据库内容很好,DB内容正确,当我点击摘要test_runs DB网格时,详细测量DB网格的内容被正确更新. 唯一的问题是在test_runs查询的表中插入一行导致滚动条从测量DB网格的DB网格中消失. 当我发表评论时,我可以单击test_runs数据库网格并在没有滚动条转换的情况下在测试运行之间进行交换,但是永远无法返回到当前测试,因为在数据库网格中没有它的条目. 当我第一次启动一个新的测试数据集时,当然,返回零 – 这可能导致滚动条消失? 但是,当进行测量时(每隔一秒,基于计时器),我已经检查过,并且dataset.RecordCount`的值递增,所以这里应该是第二次测量后的滚动条?或者,一旦控件确定不需要它,我是否必须强制它出现? (使DB网格无效并未导致丢失的滚动条出现) [更新] 我删除了数据库(我的代码在第一次运行时自动重新创建).首先,DB网格都没有垂直滚动条,因为它们都是空的.当我添加第一个测试时,“摘要”DB网格没有滚动条,因为它只有1个条目,“详细信息”DB网格在0处没有滚动条,条目和滚动条在第2组测量中出现. 我添加了第二次测试运行,“sumamry”DB网格有一个滚动条,因为它现在有两个条目,但是一旦我将第二个条目添加到摘要,滚动条就从“详细信息”数据库网格中消失了(无论有多少条目,它都没有做到(无论它有多少条目(我断点,因为每组测量都被添加并检查measuredQuery.RecordCount并看到它变为0,1,2 ……) 值得指出的是,这只发生在我添加新的测试运行时(第一次除外)).如果我启动程序,两个DB网格都有预期的滚动条(> 1个条目).我可以点击或鼠标滚动摘要,以显示相应测试运行的详细信息.滚动条永远不会消失 – 直到我添加一个新的测试运行,它将一行插入到摘要数据库网格中. [更新] 解决方法
阅读完您的评论并查看编辑问题后,我非常确定TDBGrid的“详细信息”DataSet在您的INSERT之后返回一条记录.这解释了为什么没有垂直滚动条 – 只有当记录>时,TDBGrid才会显示垂直滚动条. 1.
您可以通过检查链接到网格的DataSet.RecordCount进行简单测试.它应该显示1. 显然,QC中存在一个已知问题:
对于过滤的DataSet也可能是这样.因此,您可能希望实现QC中建议的一种解决方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |