AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TcxGrid - ERR: hat kein übergeordnetes Fenster
Thema durchsuchen
Ansicht
Themen-Optionen

TcxGrid - ERR: hat kein übergeordnetes Fenster

Ein Thema von Hausmarke · begonnen am 17. Mai 2013 · letzter Beitrag vom 29. Mai 2013
Antwort Antwort
Seite 2 von 2     12   
Perlsau
(Gast)

n/a Beiträge
 
#11

AW: TcxGrid - ERR: hat kein übergeordnetes Fenster

  Alt 21. Mai 2013, 12:39
lösung: das richtige event für meinen zweck nutzen: OnDblClick
Und was hat das jetzt mit der Fehlermeldung des fehlenden Parent zu tun? Wie sollte das zusammenhängen?
  Mit Zitat antworten Zitat
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#12

AW: TcxGrid - ERR: hat kein übergeordnetes Fenster

  Alt 21. Mai 2013, 13:24
fundiert kann ich das nicht beantworten.

aber die gleiche funktion unter zuhilfenahme des onDblClick Events anstatt des OnEditDblClick events funktoniert nun tadellos.
schaut man sich die events genauer an, stellt man fest, das die OnEdit Variante zwei parameter übergibt:

AItem specifies the grid item whose value is being edited.
AEdit specifies the cell editor.

Das Grid wird wie gesagt in den "edit" modus gesetzt, und ohne die eingabe zu bestätigen oder abzubrechen, hatte ich den fokus auf ein anderes element gesetzt.

Wo jedoch der genaue zusammenhang zum parent fehler kommt, kann ich dir nicht sagen, dafür bin ich auch zu frisch im Thema "Delphi".

Aber dieses problem ist leicht rekonstruierbar.
cxGrid -> OnEditDblClick -> focus auf ein anders element setzen -> Fehler
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#13

AW: TcxGrid - ERR: hat kein übergeordnetes Fenster

  Alt 21. Mai 2013, 15:50
Wo jedoch der genaue zusammenhang zum parent fehler kommt, kann ich dir nicht sagen, dafür bin ich auch zu frisch im Thema "Delphi".
Wenn der Fehler kommt, daß kein Parent zugewiesen ist, dann hast du irgendwo auf deinem Form eine Komponente, der kein Parent zugewiesen wurde. Die ist jetzt vermutlich immer noch da. Das würde ich an deiner Stelle auf jeden Fall einmal überprüfen.

Aber dieses problem ist leicht rekonstruierbar.
cxGrid -> OnEditDblClick -> focus auf ein anders element setzen -> Fehler
Nein, ich kann das nicht nachvollziehen, weilich kein cxGrid habe. Aber ich kenne den Parent-Fehler, der bei mir vorzugsweise dann auftritt, wenn ich zur Laufzeit eine Komponente erzeuge und zuvor im Code vergessen habe, einen Parent zuzuweisen.
  Mit Zitat antworten Zitat
Bebe

Registriert seit: 3. Apr 2005
Ort: Berlin
104 Beiträge
 
Delphi 10.1 Berlin Professional
 
#14

AW: TcxGrid - ERR: hat kein übergeordnetes Fenster

  Alt 21. Mai 2013, 17:04
Hallo,

bei OnDblClick reagiert das gesamte cxGrid, obwohl du nicht auf einem Feld geklickt hast. Du möchtest aber doch einen Datensatz anklicken, wo sich ein Detailformular zum Bearbeiten öffnet.

Ich würde dir raten OnCellDblClick zu verwenden. Das reagiert nur wenn du auf einen Datensatz klickst. Außerdem würde ich das cxGrid grundsätzlich sperren, d. h. bei OptionData des DBTabelviews die Eigenschaften Deleting, Editing und Inserting auf False setzen (Appending ist standardmäßig False). Vorausgesetzt du willst im Grid sowieso keine Daten bearbeiten.

Das Detailformular würde ich im Event OnCellDblClick erzeugen und mit Showmodal anzeigen (danach natürlich Free(n)). Dann kann man nur noch das zuletzt geöffnete Formular bearbeiten und das Grid nicht anklicken, somit auch keinen Datensatz wechseln.

So z. B.
Delphi-Quellcode:
   frmDetail := TfrmDetail.Create(self);
    try
       case frmDetail.ShowModal of
        mrOk : begin
          .... MachWas;
        end;
        mrCancel : begin
          .... MachNüscht;
        end;
       end;
    finally
       frmDetail.Free;
    end;
Ich hoffe ich konnte ein wenig helfen.

Gruß
Matthias

<edit> Fehler beseitigt.

Geändert von Bebe (21. Mai 2013 um 17:09 Uhr) Grund: Ein Wort vergessen :-)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#15

AW: TcxGrid - ERR: hat kein übergeordnetes Fenster

  Alt 21. Mai 2013, 20:39
Ich würde übrigens anders vorgehen:

Dein Formular hat zwei Bearbeitungsmodi: 'Scrollen' und 'Bearbeiten'.

Das Grid ändert nun sein Verhalten abhängig vom Bearbeitungsmodus und eben nicht direkt durch das Event, das den Moduswechsel durchführt.

Weiterhin gibt es -nur als Denkanstoß- noch mindestens drei weitere Möglichkeiten
1. Öffne einen modalen Dialog, um die Änderungen am Record vorzunehmen. Gleichzeitig ist dein Grid eh gesperrt, eben weil der separate Dialog modal ist.

2. Du kannst du Daten auch direkt im Grid ändern.
3. Du musst das Grid nicht sperren, wenn ein Datensatz verändert wird. Du solltest aber geeignet reagieren, wenn der Fokus auf einen anderen Datensatz gesetzt wird. Du könntest z.B. prüfen, ob der Datensatz verändert wurde und per Messagebox fragen, ob die Daten gespeichert, verworfen, oder der Fokuswechsel verworfen werden soll.
  Mit Zitat antworten Zitat
Hausmarke

Registriert seit: 5. Apr 2013
Ort: Sachsen
47 Beiträge
 
Delphi 2007 Professional
 
#16

AW: TcxGrid - ERR: hat kein übergeordnetes Fenster

  Alt 29. Mai 2013, 08:25
sorry das ich hier erst so spät noch mal rein schaue.

besten dank für eure Lösungsvorschläge.

@ Furtbichler:
Zitat:
1. Öffne einen modalen Dialog, um die Änderungen am Record vorzunehmen. Gleichzeitig ist dein Grid eh gesperrt, eben weil der separate Dialog modal ist.

2. Du kannst du Daten auch direkt im Grid ändern.
3. Du musst das Grid nicht sperren, wenn ein Datensatz verändert wird. Du solltest aber geeignet reagieren, wenn der Fokus auf einen anderen Datensatz gesetzt wird. Du könntest z.B. prüfen, ob der Datensatz verändert wurde und per Messagebox fragen, ob die Daten gespeichert, verworfen, oder der Fokuswechsel verworfen werden soll.
klasse ideen, nr 3 schwebte mir auch schon als lösungsansatz vor. Da ich die Daten nicht im Grid sondern in den dazugehörigen DBEdits ändere, konnte man eben auch im Grid hin und her wechseln und und es haben sich die dazu gehörigen Felder aktualisiert.
Mein problem war, das ich dachte das sich die ID des zu bearbeitenden Datensatzes ändert, sobald man zwischen mehreren Zeilen wechselt. Allerdings werden die Daten ja direkt in die "DB" geschrieben, sobald man etwas in den dazu gehörigen DBEdits geändert hat. Durch ein Commit der Transaktionskomponente wurde das dann endgültig gespeichert.

und da hatte ich einen fehler eingebaut.
Im grunde war es die korrekte konfiguration des grids und der dazu gehörigen komponenten. Ich muss dazu sagen, das ich im thema datasets etc. noch relativer neuling bin, und eher via trial and error die neuen dinge mir erschließe. In dem fall wurde mir von nem kollegen geholfen, der da mal drüber geschaut hat.

in diesem sinne, noch mal vielen dank an alle
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 02:28 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