Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TDBGrid am Aktualisieren hindern. OHNE TTabl.DisableControls (https://www.delphipraxis.net/43514-tdbgrid-am-aktualisieren-hindern-ohne-ttabl-disablecontrols.html)

Thanatos81 5. Apr 2005 10:19


TDBGrid am Aktualisieren hindern. OHNE TTabl.DisableControls
 
Hallot DP'ler!

Folgendes Problem: Ich habe zwei TTable-Objekte als Master-Detail-Verknüpfung. Auf meinem MainForm wird die Master in einem TDBGrid angezeigt. In einem anderen Fenster werden die Daten ausgewertet und dafür von BoF bis EoF mit Next durchlaufen.

Nun zeigt mir das TDBGrid natürlich jede Umpositionierung des DS-Zeigers an. Also habe ich das ganze mit Master.DisableControls unterbunden. Problem dabei ist, dass die Zeigeränderung dann anscheinend auch nicht an die Slave-Table mitgeteilt wird. Kann ich mit Prozeduren des TDBGrid die Aktualisierung abschalten? Bei einigen VCL-Kompos gibts ja BeginUpdate und EndUpdate, etwas in der Art habe ich allerdings beim TDBGrid nicht gefunden.

Wäre schön, wenn mir da jemand helfen könnte. Vielen Dank im Voraus,

Thanatos81 5. Apr 2005 10:34

Re: TDBGrid am Aktualisieren hindern. OHNE TTabl.DisableCont
 
Hab jetzt in der OH die Eigenschaft BlockReadSize gefunden
Zitat:

Zitat von Delphi-OH
Die Eigenschaft BlockReadSize bestimmt, wie viele Datensatzpuffer in jedem Block gelesen werden.

Delphi-Syntax:

property BlockReadSize: Integer;

C++ Syntax:

__property int BlockReadSize = {read=FBlockReadSize, write=SetBlockReadSize, nodefault};

Beschreibung

Mit BlockReadSize können Sie schnell die gesamte Datenmenge durchsuchen. Wenn BlockReadSize größer als Null ist und Next aufgerufen wird, werden datensensitive Steuerelemente nicht aktualisiert und keine Datenereignisse ausgelöst. Mit dem Wert Null kann der Blockmodus deaktiviert werden. Enthält BlockReadSize einen positiven Wert, wird die Eigenschaft State der Datenmenge automatisch auf dsBlockRead gesetzt.

Allerdings kann ich dieser komischerweise keinen WErt zuweisen, bleibt immer bei 0. Habs mit 1..10 und vielfachem von 1024 (1024,4096) versucht. Hat jemand Erfahrung mit BlockReadSize?

mschaefer 5. Apr 2005 11:06

Re: TDBGrid am Aktualisieren hindern. OHNE TTabl.DisableCont
 
Moin, moin,

das ist prinzipiell mit der DBGrid-Komponente ein ein hoffnungsloses Unterfangen Du könntest alledings ein Image darüberlegen und den Canvas des Grids auf den Image.#Canvas kopieren.

Allerdings neige ich dir dazu zu raten für die Maintable ein StringGrid zu nehmen. Da kannst Du die Daten dann einlesen, wann Du willst. Standartmäßig würde man eine Einleseroutine im OnChange-Ereignis der DataSet-Komponente einrichten. AchSo, dann mußt Du aber auch dafür Sorgen, das Änderungen gespecihert werden. Also wieder im OnChange der DataSet Komponente vor dem erneuten einlesen.

Grüße // Martin

woki 5. Apr 2005 12:24

Re: TDBGrid am Aktualisieren hindern. OHNE TTabl.DisableCont
 
Hi,

die einfachste Lösung für dein Problem sollte sein, daß du die DBGrid mit einer eigenen TTable-Instanz verbindest, die auf die gleich Tabelle zeigt. Nun kannst du sowohl die Daten als auch die Cursor synchronisieren, wann immer es dir gefällt.

Grüße
Woki

Thanatos81 6. Apr 2005 09:33

Re: TDBGrid am Aktualisieren hindern. OHNE TTabl.DisableCont
 
Danke für eure Vorschläge! Hab aber jetzt doch ne andere Lösung gewählt. Da das Anzeigen der Daten während der Auswertung unwichtig ist, rufe ich vorher gridsAus und hinterher gridsAn auf:

Delphi-Quellcode:
procedure TMainForm.gridsAus;
begin
  gridMaster.DataSource := nil;
  gridDetail.DataSource := nil;
end;

procedure TMainForm.gridsAn;
begin
  gridMaster.DataSource := dm.dsLabdata;
  gridDetail.DataSource := dm.dsPositionen;
end;
Funktioniert wunderbar. Das Auswertungsformular verdeckt eh das MainForm. Es ging mir also nur um den Zeitverlust, den das Anzeigen der Daten in den DBGrids verursachte.

Das mit den zwei TTables wäre auch ne elegante Lösung (wesentlich eleganter als meine ;-) ), aber ich hab mein Datenmodul gerne möglichst übersichtlich...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz