Delphi DBGrid显示压缩行

时间:2016-11-03 20:50:13

标签: delphi tdbgrid

我遇到了Delphi的DBGrid最奇怪的问题。

我注意到有时,我的意思是有时候(完全是随机的)当我将行加载到delphi DBGrid中时,网格不会显示数据。

它显示了几个压缩行,基本上delphi行的高度非常窄,甚至无法读取信息。

这是什么原因?怎么能解决它?

更新

我终于能够抓住行自己动手来获取图像了。 如您所见,这些行在技术上显示为1。但是,如果它们被压缩得非常紧密,那么它就会变得空洞......

请看下图: image of rows compressed

任何想法对于导致这种情况的原因以及如何防止它都会很棒......

1 个答案:

答案 0 :(得分:0)

这个问题也发生在我身上。我想我已经解决了。

在我的情况下,我在ADOQuery.Open();内调用TThread,并且此ADOQuery绑定到DataSource并且绑定到DBGrid。我怀疑辅助线程中可能存在执行问题,因此我在ADOQuery上玩了一点。

这就是我解决问题的方法。在调用ADOQuery.Open()之前和开始新线程之前,我做了DataSource.DataSet := nil;。我分配了Thread.OnTerminate := RefreshGridFinished;。然后,我使用某个最终会调用TThread的过程来启动新的ADOQuery.Open();。然后,当TThread完成时,我有了此处理程序,该处理程序会将获取的完整ADOQueryDataSet分配给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;