我遇到了Delphi的DBGrid最奇怪的问题。
我注意到有时,我的意思是有时候(完全是随机的)当我将行加载到delphi DBGrid中时,网格不会显示数据。
它显示了几个压缩行,基本上delphi行的高度非常窄,甚至无法读取信息。
这是什么原因?怎么能解决它?
更新
我终于能够抓住行自己动手来获取图像了。 如您所见,这些行在技术上显示为1。但是,如果它们被压缩得非常紧密,那么它就会变得空洞......
任何想法对于导致这种情况的原因以及如何防止它都会很棒......
答案 0 :(得分:0)
这个问题也发生在我身上。我想我已经解决了。
在我的情况下,我在ADOQuery.Open();
内调用TThread
,并且此ADOQuery
绑定到DataSource
并且绑定到DBGrid
。我怀疑辅助线程中可能存在执行问题,因此我在ADOQuery
上玩了一点。
这就是我解决问题的方法。在调用ADOQuery.Open()
之前和开始新线程之前,我做了DataSource.DataSet := nil;
。我分配了Thread.OnTerminate := RefreshGridFinished;
。然后,我使用某个最终会调用TThread
的过程来启动新的ADOQuery.Open();
。然后,当TThread
完成时,我有了此处理程序,该处理程序会将获取的完整ADOQuery
或DataSet
分配给DataSource
:
procedure TMyForm.RefreshGridFinished(Sender: TObject);
begin
TThread.Synchronize(TThread(Sender),
procedure
begin
DataSource.DataSet := ADOQuery; // I assign fetched dataset
end);
if TThread(Sender).FatalException <> nil then
begin
Exit;
end;
Thread := nil; // Class field
end;