AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

cxGrid RecordChanged

Ein Thema von peberhardt · begonnen am 5. Feb 2013 · letzter Beitrag vom 6. Feb 2013
Antwort Antwort
peberhardt

Registriert seit: 14. Jun 2011
11 Beiträge
 
#1

cxGrid RecordChanged

  Alt 5. Feb 2013, 20:34
Hallo liebe Gemeinde,

ich benutze das cxGrid (DB) von TMS.
angebunden ist das ganze an mysql.

vorhanden sind 3 tabellen.
lieferant
produktgruppe
produkt.

benutze dafür Uniconnection, und 3 uniquery
verbunden sind diese über die jeweilige id der mastertabelle.

das ganze funkt. auch so wie es soll.

jetzt zum Problem.

ich brauche ein event für den datensatz wechsel im letzten Grid.
heißt: wenn ich das Produkt wechsle sei es durch scroll ( maus )
oder tasten rauf runter muss ein bild aus dem internet geladen werden.
das laden dauert 2-3 sek.

Wenns nur einmal käme, wäre das in Ordnung.
dummerweise ereignend sich dieses Ereignis besonders bei start der Anwendung bereits 17 mal.

( wohlgemerkt bei nur 2 testprodukten in der db )

Eingebaut habe ich den download in das Ereignis: cxGridDBTableView2FocusedRecordChanged

offensichtlich kann man das direkt mit den sagen wir mal RowDraw vergleichen,
das Ereignis würde ja bei jeden Datensatz kommen....
PS. rowdraw gibt’s vielleicht nicht, ( nur als Beispiel )

habe schon alle Ereignisse die passen könnten getestet, aber nix dabei, das gerade beim
ersten öffnen nur einmal ( sich ereignet... )

auch bei den Ereignissen des Querys und des Datasets fand ich nichts was funktionierte.

Eine Hoffnung hätte ich noch bei DataModul_haupt.DS_MySQl_produkte.DataSet.DisableC ontrols;

Habe aber keine passende Stelle gefunden, wo ich das einbauen könnte.
Das Ereignis record gewechselt, soll ja mindestens einmal ( und nicht öfters ) kommen

Ich hoffe ihr könnt mir folgen und helfen.

mfg
peberhardt
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#2

AW: cxGrid RecordChanged

  Alt 6. Feb 2013, 07:21
Die Komponente ist von Developer Express und ich meine, es wäre das GridView.OnFocusedRecordChanged-Event, das Du verwenden kannst.

Und natürlich wird beim Initialen Starten das Event ausgelöst. Wenn der Lieferant geladen wird, werden für jeden Datensatz die Details geladen und damit auch der o.g. Event ausgelöst.

Abhilfe: Lösche alle Events vor der Initialisierung und hänge sie hinterher wieder ein.
Dann rufst Du einmalig das Event für das gerade fokussierte Produkt auf und fertig.
  Mit Zitat antworten Zitat
peberhardt

Registriert seit: 14. Jun 2011
11 Beiträge
 
#3

AW: cxGrid RecordChanged

  Alt 6. Feb 2013, 07:36
besten dank für deine antwort.

wo könnte ich das wieder einhängen..
sollte schon in einen ereigniss sein.

das ist wie eine kettenreaktion
das lieferantengrid lädt z.b. 2x
dadurch lädt das produktgruppen grid je
lieferand dessen pgruppen

und das produktgrid praktisch
anzahl lieferanten x anzahl pgruppen x anzahl produkte

mfg peberhardt
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: cxGrid RecordChanged

  Alt 6. Feb 2013, 07:42
'Kettenreaktion' trifft den Nagel auf den Kopf.

Delphi-Quellcode:
Procedure TMyForm.InitializeData;
Begin
  MyProductGridView.OnRecordChanged := Nil;
  Try
    LoadDataFromDatabase();
    ..
  Finally
    MyProductGridView.OnRecordChanged := MyProductGridViewRecordChangedEvent;
  End
End;
So in etwa. Natürlich alle relevanten Events vorher per ':= Nil' aushängen und hinterher wieder einhängen.

Eine Alternative ist die Verwendung eines privaten boolschen Feldes 'fInitializing'.
Delphi-Quellcode:
Procedure TMyForm.InitializeData;
Begin
  fInitializing := True;
  Try
    LoadDataFromDatabase();
    ..
  Finally
    fInitializing := False;
  End
End;
und in jedem Eventhandler
Delphi-Quellcode:
Procedure TMyForm.MyProductGridViewRecordChanged(...);
Begin
  if fInitializing then exit; // <-- diese Zeile am Anfang jedes Eventhandlers
...
End;
Beides hat Vor- und Nachteile. Ich tendiere zur 2.Möglichkeit, weil ich dadurch generell steuern kann, wann meine Events feuern sollen.

Falls die Daten schon geladen sind und dein Problem beim instantiieren der Form auftritt, dann würde ich so vorgehen

Delphi-Quellcode:
Procedure TMyForm.FormCreate(...)
Begin
  MyGridView.DataBinding.DataSource := Nil;
End;

Procedure TMyForm.FormActivate(...)
Begin
  MyProductGridView.OnRecordChanged := Nil;
  Try
    MyGridView.DataBinding.DataSource := MyDataSource;
  Finally
    MyProductGridView.OnRecordChanged := MyProductGridViewRecordChangedEvent;
  End
End;

Geändert von Furtbichler ( 6. Feb 2013 um 07:46 Uhr)
  Mit Zitat antworten Zitat
peberhardt

Registriert seit: 14. Jun 2011
11 Beiträge
 
#5

AW: cxGrid RecordChanged

  Alt 6. Feb 2013, 08:06
besten dank

werde das heute abend mal testen

ich melde mich dann wieder

mfg peberhardt
  Mit Zitat antworten Zitat
peberhardt

Registriert seit: 14. Jun 2011
11 Beiträge
 
#6

AW: cxGrid RecordChanged

  Alt 6. Feb 2013, 21:18
Hallo,

habs jetzt doch anders hinbekommen.

Delphi-Quellcode:
procedure TDataModul_haupt.Query_MySQl_lieferantenBeforeScroll(DataSet: TDataSet);
begin
form_haupt.var_counter:='a';
end;

procedure TDataModul_haupt.Query_MySQl_produkt_gruppenBeforeScroll(DataSet: TDataSet);
begin
form_haupt.var_counter:='a';
end;
und im FocusedRecordChanged frage ich die globale variable ab...

Delphi-Quellcode:
  if var_counter = 'athen
  begin
    du was... und zwar nur einmal....
    var_counter := 'x';
  end;
Danke für deine Mühe.

mfg
peberhardt
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:59 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