AGB  ·  Datenschutz  ·  Impressum  







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

JvDBTreeView und DragnDrop

Ein Thema von Andreas H. · begonnen am 27. Dez 2006 · letzter Beitrag vom 4. Jan 2007
Antwort Antwort
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#1

JvDBTreeView und DragnDrop

  Alt 27. Dez 2006, 10:33
Hallo,

ich möchte folgende Funktion realisieren:

In einer JvDBTreeView wird eine MySQL-Tabelle angezeigt.
In einer JvDBUltimGrid wird eine weitere Tabelle angezeigt.
Per DragnDrop soll nun ein Datensatz aus der Baumsicht in die Tabelle kopiert werden.

Leider ist es mir nicht gelungen, den aktuellen Datensatz der Treeview zu ermitteln und in die Grid-Tabelle einzufügen. Schon beim Ereingnis onStartDrag erhalte ich immer den ersten Datensatz der Tabelle - abhängig von der eingestellten Sortierung bei TZTable. Nach dem Ziehen ist der erste Datensatz selektiert.
JvTreeView hat DragMode:=dmAutomatic und ReadOnly:=true;
Die Datenbank ist über die ZEOS-Komponenten angebunden

Folgende Codeteile sind relevant:
Delphi-Quellcode:
procedure TDokDBMainForm.JvDBUltimGrid1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  with DSDocTags.DataSet do
  begin
    Append;
    FieldByName('DocID').Value:=DSDocs.DataSet.FieldByName('ID').Value;
    FieldByName('TagID').Value:=DMDokDB.DSTags.DataSet.FieldByName('ID').Value;
  end;
end;
In DMDokDB.DSTags.DataSet.FieldByName('ID').Value steht immer der erste Datensatz der Tabelle!

Wie gesagt, auch wenn ich beim Ereignis onStartDrag den Wert ermittle, ist es immer der erste Wert der Tabelle!
Ein DBEdit an der gleichen Datenquelle zeigt beim Ziehen den richtigen (selektierten) Datensatz an!

Ich bin echt ratlos. Wer hat ne Idee?


Gruß Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: JvDBTreeView und DragnDrop

  Alt 27. Dez 2006, 12:43
Hallo Andreas,

wenn ich dein Problem richtig verstehe, dann geht es dir nur um die Ermittlung des korrekten Datensatzes zu einem bestimmten Knoten im JvDBTreeView und alles andere sind Hintergrundinfos?

Delphi-Quellcode:
procedure TDemoForm.DemoPanelDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source is TJvDBTreeView) and Assigned(TJvDBTreeView(Source).Selected);
end;

procedure TDemoForm.DemoPanelDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
  with Source as TJvDBTreeView do
    TPanel(Sender).Caption := DataLink.DataSet.Fields[0].AsString;
end;
So sollte es funktionieren.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#3

Re: JvDBTreeView und DragnDrop

  Alt 27. Dez 2006, 12:58
Hallo,

habe es gleich probiert und es geht!

Aber warum geht meine Variante nicht? Die Datenquelle hat doch den selektierten Knoten als aktuellen Datensatz, wie man aus den Kontroll-Edits ersehen kann. Wenn ich die Datenquelle im Programm abfrage, bekomme ich diesen nicht als Ergebnis. Warum?

Wenn ich Dich richtig verstehe, muss ich auf die Eigenschaft Datalink zurückgreifen, die mir bis heute noch nie begegnet ist.

In der Onlinehilfe finde ich dazu (TCustomDBGrid.DataLink Eigenschaft) Folgendes:
Zitat:
In Anwendungen sollte die Eigenschaft DataLink nicht verwendet werden. Bei der Eigenschaft DataLink handelt es sich um eine geschützte Eigenschaft. Komponentenprogrammierer können Nachkommen des TGridDataLink-Objekts einsetzen, um auf zusätzliche Datenereignisse zu reagieren.
Kannst Du es mir bitte erklären?

By the way: wie schafft man im Schnitt ca. 10 Postings pro Tag?

Gruß und Danke Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: JvDBTreeView und DragnDrop

  Alt 27. Dez 2006, 13:33
Hallo,

Zitat von Andreas H.:
Aber warum geht meine Variante nicht?
keine Ahnung. Ich habe mir einfach die Edit-Methode angesehen und die Vorgehensweise dort auf meinen Beispiel-Code übertragen.

Zitat von Andreas H.:
Die Datenquelle hat doch den selektierten Knoten als aktuellen Datensatz, wie man aus den Kontroll-Edits ersehen kann.
Durch diesen Hinweis von dir und dein Zitat aus der Online-Hilfe habe ich DataLink in meinem Beispiel noch auf DataSource abgeändert und siehe, auch der normale Weg funktioniert bei mir.

Zitat von Andreas H.:
Wenn ich die Datenquelle im Programm abfrage, bekomme ich diesen nicht als Ergebnis. Warum?
Du könntest es erforschen indem du in deinem Programm einen event handler für JvDBTreeView.DataSource.OnDataChange() einbaust. So erfährst du, dass und wann der record pointer verschoben wird. Ich vermute, dass der fragliche DataSet in einer Master-Detail-Verknüpfung engagiert ist, deren Automatismen dir gelegentlich dazwischen funken. Wenn dem so ist, dann spendiere der DBTreeView einen eigenständigen DataSet und "verknüpfe" im Code (Filter, Locate, ...).

Zitat von Andreas H.:
By the way: wie schafft man im Schnitt ca. 10 Postings pro Tag?
10 Fragen pro Tag zu stellen ist nicht weiter schwierig ...

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#5

Re: JvDBTreeView und DragnDrop

  Alt 27. Dez 2006, 14:01
Ja,

das mit dem Lookup kann stimmen. Das wäre meine nächste Tat gewesen. Spätestens, wenn ich die Anwendung von SDI auf MDI umstelle!

Nochmals vielen Dank.

Vielleicht sollte ich auch mehr im Forum fragen, dann gings mit dem Programmieren auch voran!


Gruß und guten Rutsch und alles Gute im neuen Jahr, Andreas
  Mit Zitat antworten Zitat
martinalex

Registriert seit: 4. Jan 2007
8 Beiträge
 
Delphi 7 Professional
 
#6

Re: JvDBTreeView und DragnDrop

  Alt 4. Jan 2007, 15:14
Andreas, marabu,

ich versuche auch gerade Drag&Drop hinzukriegen, aber in die andere Richtung, von einem TJvDBGrid zu einem TJvDBTreeView.
Leider gibt es einen wichtigen Unterschied:

Mir den Code unten wird der aktuelle Datensatz = Knoten im Tree gefunden, aber nicht der Knoten, wo der Drag&Drop endet. Drop ändert nicht den gewählten Knoten.

Has jemand sowas schon das mal ausprobiert? Ist eigentlich nicht exotisch, so funktioniert z.B. das verschieben einer E-Mail in Outlook - von einem Grid zu einem Tree.

Delphi-Quellcode:
with Source as TJvDBTreeView do
    TPanel(Sender).Caption := DataLink.DataSet.Fields[0].AsString;


P.S. Andreas, was ist der Vorteil von JvDBUltimGrid zu JvDBGrid? Ist nicht das TJvDBGrid das Jedi DB Grid das weiterentwickelt wird?



Gruss Martinalex
  Mit Zitat antworten Zitat
Benutzerbild von Andreas H.
Andreas H.

Registriert seit: 3. Mär 2006
Ort: Schopfloch
163 Beiträge
 
Delphi 2006 Professional
 
#7

Re: JvDBTreeView und DragnDrop

  Alt 4. Jan 2007, 15:44
Hi,

jetzt, wo Du es sagst, rieche ich es auch

Die beiden Komponenten unterscheiden sich in zwei Properties. Beim JvDBGrid ist mir das EditContros gar nicht aufgefallen . Deshalb habe ich die Ultim-Variante eingesetzt. Wenn Du sagst, JvDBGrid wird weiterentwickelt, muss ich wohl umstellen!

Den Knoten findest Du so:
Delphi-Quellcode:
procedure TDokDBMainForm.TDBTreeViewDragDrop(Sender, Source: TObject; X,
  Y: Integer);
begin
  TDBTreeView.GetNodeAt(x,y);
  // weitere Funktionen...
end;
Gruß Andreas
  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:18 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