AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi VirtualStringTree : Datenanzeige
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualStringTree : Datenanzeige

Ein Thema von ucor · begonnen am 11. Mai 2005 · letzter Beitrag vom 17. Mai 2005
Antwort Antwort
ucor

Registriert seit: 19. Apr 2005
18 Beiträge
 
#1

VirtualStringTree : Datenanzeige

  Alt 11. Mai 2005, 18:31
Datenbank: Access • Zugriff über: ADO
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.
  Mit Zitat antworten Zitat
Alexander

Registriert seit: 28. Aug 2002
Ort: Oldenburg
3.513 Beiträge
 
Turbo Delphi für .NET
 
#2

Re: VirtualStringTree : Datenanzeige

  Alt 11. Mai 2005, 19:21
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:
SELECT bla FROM tabelle WHERE ID = ID_des_markierten_Eintrags Oder habe ich dich falsch verstanden?
Alexander
  Mit Zitat antworten Zitat
ucor

Registriert seit: 19. Apr 2005
18 Beiträge
 
#3

Re: VirtualStringTree : Datenanzeige

  Alt 11. Mai 2005, 19:32
Hallo Alexander,
das Problem liegt nicht in der SQL Anweisung, sondern im VST. Hier muß beim Doppelklicken der richtige Datensatz erkannt werden.

Gruß U.
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#4

Re: VirtualStringTree : Datenanzeige

  Alt 11. Mai 2005, 19:57
Hallo,

ich mache das immer so:

Code:
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;
Ich hoffe das hilft dir weiter.
Gruß

Albi
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#5

Re: VirtualStringTree : Datenanzeige

  Alt 12. Mai 2005, 08:18
VST.FocusedNode zeigt den aktuelle gewählten knoten.
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 !
  Mit Zitat antworten Zitat
ucor

Registriert seit: 19. Apr 2005
18 Beiträge
 
#6

Re: VirtualStringTree : Datenanzeige

  Alt 12. Mai 2005, 13:29
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:
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;
Vielleicht kennt ihr eine kürzere und/oder elegantere Lösung.
Wäre für jede lehrreiche Lektion dankbar.

Gruß U.
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#7

Re: VirtualStringTree : Datenanzeige

  Alt 12. Mai 2005, 14:41
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?
Gruß

Albi
  Mit Zitat antworten Zitat
ucor

Registriert seit: 19. Apr 2005
18 Beiträge
 
#8

Re: VirtualStringTree : Datenanzeige

  Alt 12. Mai 2005, 16:09
Hallo Albi,

ich habs mit der "Schleife für die Spalten" nicht verstanden.

Gruß U.
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#9

Re: VirtualStringTree : Datenanzeige

  Alt 12. Mai 2005, 17:28
,

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:
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;
Das Tmp kannst Du dir sparen und den Inhalt direkt über ListView1.items[i].add(VST1.Text[Node,i]. So sollte das ganze funktionieren.
Gruß

Albi
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#10

Re: VirtualStringTree : Datenanzeige

  Alt 17. Mai 2005, 09:22
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.
  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 16:19 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