![]() |
Datenbank: Access • Zugriff über: ADO
VirtualStringTree : Datenanzeige
Hallo,
ich benutze die VST-Komponente um die Daten einer Datenbank in einer Baumstruktur anzuzeigen. Das klappt soweit ganz gut. Mein Problem ist folgendes: Beim Doppelklick auf irgendeinen Node soll der Rest des jeweiligen Datensatzes in einer Listview dargestellt werden. Wie könnte man das hinbekommen? Gruß U. |
Re: VirtualStringTree : Datenanzeige
So schwer dürfte das doch nicht sein.
Im OnDblClick musst halt noch eine Abfrage machen und diese dann im Listview anzeigen. Da es geschafft hast die Daten in dem VST anzuzeigen, wirst du es wohl auch in der Listview schaffen (wenn nicht wirst du hier wohl einiges finden...). Bei der Abfrage musst du ja nur eine WHERE Bedingung hinzufügen, die den entsprechenden Datensatz beschreibt. Speichere am besten neben den angezeigten Daten im VST noch den Primary Key und du machst dir die ganze Sache recht einfach. Die SQL-Abfrage dürfte dann bspw. so aussehen:
SQL-Code:
Oder habe ich dich falsch verstanden?
SELECT bla FROM tabelle WHERE ID = ID_des_markierten_Eintrags
|
Re: VirtualStringTree : Datenanzeige
Hallo Alexander,
das Problem liegt nicht in der SQL Anweisung, sondern im VST. Hier muß beim Doppelklicken der richtige Datensatz erkannt werden. Gruß U. |
Re: VirtualStringTree : Datenanzeige
Hallo,
ich mache das immer so:
Code:
Ich hoffe das hilft dir weiter.
procedure VSTColumnDblClick(
Sender: TBaseVirtualTree; Column: TColumnIndex; Shift: TShiftState); var Node: PVirtualNode; var i: Integer; begin ... ... Node:= VST.FocusedNode; //aktueller Node ... ... //Schleife für die Spalten ListView1.Items.add(VST.text[Node,i]) end; |
Re: VirtualStringTree : Datenanzeige
Delphi-Quellcode:
zeigt den aktuelle gewählten knoten.
VST.FocusedNode
beim doppelklick wählst du ja automatisch einen aus (mit dem ersten klick) du solltest allerdings immer noch prüfen ob ein node da ist. für den fall das jemand noch keinen knoten gewählt hatte und in einen freien bereich klickert ist focusednode=nil ! |
Re: VirtualStringTree : Datenanzeige
Hallo,
zunächst mal danke für eure Hilfe. Ich habe das Problem nun folgendermaßen lösen können: (Sicherlich nicht sehr elegant und ballastreich)
Delphi-Quellcode:
Vielleicht kennt ihr eine kürzere und/oder elegantere Lösung.
procedure TFA.VSTDblClick(Sender: TObject);
var Data : PTreeData; Node, ParentNode : PVirtualNode; InitialStates: TVirtualNodeInitStates; ListItem: TListItem; ListView: TListView; iLevel : integer; begin Data:= VST.GetNodeData(Node); begin if Assigned(Data)and (Data<>nil) then begin Node:=VST.focusedNode ; iLevel := VST.GetNodeLevel(Node); if VST.RootNodeCount > 0 then if VST.SelectedCount > 0 then begin Data := VST.GetNodeData(VST.GetFirstSelected); if ParentNode <> nil then InitialStates := InitialStates + [ivsHasChildren, ivsExpanded]; with q1 do begin case iLevel of 0: begin filtered := true; filter := 'Kunden = ' +#39 + (TTreeDataClass(Data.FObject).FKunden) +#39; with LV1 do begin clear; ListItem := Items.Add; ListItem.Caption :=FieldByName('Str').AsString ; ListItem := Items.Add; ListItem.Caption :=FieldByName('Ort').AsString ; . . . end; end; 1: begin filtered := true; filter := 'Auftraege = ' +#39 + (TTreeDataClass(Data.FObject).FAuftraege) +#39; with LV1 do begin clear; ListItem := Items.Add; ListItem.Caption :=FieldByName('Nr').AsString ; ListItem := Items.Add; ListItem.Caption :=FieldByName('Datum').AsString ; . . . end; end; 2: begin . . . end; . . . end; end; end; end; end; end; Wäre für jede lehrreiche Lektion dankbar. Gruß U. |
Re: VirtualStringTree : Datenanzeige
Hallo,
es geht dir nur um den markierten Eintrag/Zeile in der VST? Dann kannst Du doch so machen wie ich das oben beschrieben habe. Die Daten, die in die LV sollen stehen doch alle schon in der VST, oder? |
Re: VirtualStringTree : Datenanzeige
Hallo Albi,
ich habs mit der "Schleife für die Spalten" nicht verstanden. Gruß U. |
Re: VirtualStringTree : Datenanzeige
:hi: ,
mit dem folgenden Code habe ich den Inhalt der VST mal in ne *.Txt Datei geschrieben, dass solltest Du kannst Du dann einfach auf die Listview umschreiben.
Code:
Das Tmp kannst Du dir sparen und den Inhalt direkt über ListView1.items[i].add(VST1.Text[Node,i]. So sollte das ganze funktionieren.
for j:= 0 To VST1.Header.Columns.Count-1 Do /*Spaltennamen in txt schreiben*/
Begin tmp:= VST1.Header.Columns.Items[j].Text+';'; Write(f,tmp); end; Writeln(f,''); Node:= VST1.FocusedNode; for i:= 0 To VST1.Header.Columns.Count-1 DO /*Inhalt der Node's in die txt schreiben*/ Begin Tmp:= VST1.Text[Node,i]+';'; Write(f,tmp); end; |
Re: VirtualStringTree : Datenanzeige
der listview hat doch mit dem vst nix zu tun.
daher verstehe ich nicht warum du die daten unbedingt im vst speichern willst. die daten solltest du beim klick auf einen node nachladen und dann im lv anzeigen. wenn du die daten (alle) schon vorher laden willst würde ich den record/obj der die daten im vst hällt um die daten erweitern aber nicht in vst anzeigen und schon garnicht ans "nodes" drunter hägen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 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