![]() |
Stringgrid spät anzeigen bzw. füllen
Hi,
das Problem ist jetzt nicht gewaltig, aber einer weiß bestimmt was. Ich lasse Daten aus DB in einem Stringgrid anzeigen. Das geht auch, aber es dauert. Hierfür ist nicht die Datenbank vorantwortlich, sondern Delphi bzw. eher Windows. Das ganze liegt an der grafischen Darstellung. Setze ich visible des Stringgrids auf false und erst wenn die Daten da sind auf true, so geht es viel schneller. Jetzt ist die Sache nur so, daß ich in anderen Fällen das Stringgrid leer anzeige mit FixedRows usw. so daß man schon mal grob sieht was später kommt, selbst wenn nicht alles erforderliche eingegeben wurde. Ich will also das ständige Aktualisieren unterdrücken. |
Re: Stringgrid spät anzeigen bzw. füllen
Moin,
hast du ein eigenes OnDrawCell-Ereignis? Wenn ja, dann häng doch dieses Ereignis solange ab, wie du deine Daten einliest. OnDrawCell:=nil; Oder was machst du da genau? MfG Thorsten |
Re: Stringgrid spät anzeigen bzw. füllen
Stimmt, auf Nil setzen. Nur wo ? Bzw. wo setze ich a, bestn meine eigene Prozedur wieder ?
|
Re: Stringgrid spät anzeigen bzw. füllen
Moin,
naja am Anfang der Einleseroutine auf NIL setzten und am Ende wieder auf die Prozedur. MfG Thorsten |
Re: Stringgrid spät anzeigen bzw. füllen
Hai Hansa,
hast Du es schon einmal mit BeginUpdate / EndUpdate versucht? Das sollte man beim einfügen von großen Datenmengen immer verwenden.
Delphi-Quellcode:
procedure SGBeginUpdate (sg : TStringGrid);
var ndx : Integer; begin for ndx := 0 to sg.RowCount-1 do begin sg.Rows[ndx].BeginUpdate; end; for ndx := 0 to sg.ColCount -1 do begin sg.Cols[ndx].BeginUpdate; end; end; procedure SGEndUpdate (sg : TStringGrid); var ndx : Integer; begin for ndx := 0 to sg.RowCount-1 do begin sg.Rows[ndx].EndUpdate; end; for ndx := 0 to sg.ColCount -1 do begin sg.Cols[ndx].EndUpdate; end; end; procedure TForm1.Button1Click(Sender: TObject); begin SGBeginUpdate(StringGrid1); // Füllen des StringGrids mit Daten SGEndUpdate(StringGrid1); end; |
Re: Stringgrid spät anzeigen bzw. füllen
Hi,
ich bin jetzt dran mit dem Prozedur auf nil setzen usw. Das ganze müßte im BtnClick passieren. Da passen aber die erwarteten Parameter überhaupt nicht zusammen. Hat jemand ein Beispiel dafür ? Und natürlich auch wieder zurück auf die Prozedur setzen. Weiß nicht mehr wie das geht. :mrgreen: Bzw. wo steht das im Handbuch / OH ? |
Re: Stringgrid spät anzeigen bzw. füllen
Moin,
was spricht gegen BeginUpdate und EndUpdate? (toller Einwand - danke) Nun das Abhängen geht folgendermaßen:
Delphi-Quellcode:
MfG
StringGrid.OnDrawCell:=nil;
... StringGrid.OnDrawCell:=StringGridDrawCell; Thorsten |
Re: Stringgrid spät anzeigen bzw. füllen
Zitat:
Hierdrum gehts : Zitat:
|
Re: Stringgrid spät anzeigen bzw. füllen
N´abend Hansa,
denke ich ahne worum es geht. Eigentlich gehöre ich schon längst in die Schlafphase... Also, das aktualisieren bei einem Datensatzwechsel dauert wohl zu lange. Hoffe ich liege da richtig. Wenn das Dein Problem ist, dann lasse das StringGrid zunächst mit visible auf false. Du nimmst einen Timer. Der Timer wird bei jedem OnChage-Ereignis der DataSource auf enablde geschaltet und das StringGrid auf visible = false. Im Timerereignis schaltest Du den Timer wieder auf Disabled und das StringGrid visible auf true. Dadurch wird Dein StringGrid bei einem Onchage Ereignis nicht angezeigt, besser Deine Füllroutine noch nicht aufgerufen. Bei selektiertem Datensatz schlägt dann mit kleiner Verzögerung das Timerereignis zu und führt nun Deine Füllroutine aus und setzt das Grid auf visible. Gute Nacht // Martin |
Re: Stringgrid spät anzeigen bzw. füllen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz