AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Durch klick auf TTreeView in Tabelle DS Positionieren
Thema durchsuchen
Ansicht
Themen-Optionen

Durch klick auf TTreeView in Tabelle DS Positionieren

Offene Frage von "Christian18"
Ein Thema von Christian18 · begonnen am 12. Jul 2006 · letzter Beitrag vom 13. Jul 2006
Antwort Antwort
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Durch klick auf TTreeView in Tabelle DS Positionieren

  Alt 12. Jul 2006, 09:37
Datenbank: Access • Version: 2000 • Zugriff über: ADO
Hallo,

ich habe eine DB in der ich zwei Tabellen habe. Die Informationen, die in der Tabelle enthalten sind, importiere ich mit folgender Routine in meiner TreeView Komponente.

Delphi-Quellcode:
procedure TProgramm.FillTree(b : TTreeView; t1, t2 : TADOTable);
  var n : TTreeNode;
      i1, i2 : Integer;
begin
  b.Items.Clear;
  i1:=t1.RecNo;
  i2:=t2.RecNo;
  t1.First;
  while not t1.Eof do
    begin
      n:=b.Items.AddChild(nil, t1.FieldByName('Feldname1').AsString);
      t2.First;
      while not t2.Eof do
        begin
          b.Items.AddChild(n, t2.FieldByName('Feldname2').AsString);
          t2.Next;
        end;
      t1.Next;
    end;
  t1.RecNo:=i1;
  t2.RecNo:=i2;
end;
Ich verwende diese Komponente, um eine hierarchische Darstellung meiner Tabelleninhalte zu erreichen. Das funktioniert auch problemlos. Es sieht auch richtig toll aus. Aber eine Funktionalität müsste ich jetzt noch haben. Wenn ich einen Knoten auswähle, durch einen Mouseklick, dann soll der Focus auch in der Tabelle auf diesen Datensatz gesetzt werden. Wie kann ich das tun? WICHTIG!!! Hierbei ist noch wichtig, wenn ich einen Knotenpunkt einmal anklicke, dann soll der Focus in der Master Tabelle auf den Datensatz gesetzt werden und wenn ich einen Knoten öffne, dann soll der Focus in der Detail Tabelle auf den ersten Datensatz gesetzt werden. Wenn ich einen Knoten offen habe, und ich einen Datensatz in einem Unterknoten auswähle, dann soll auch in der Detail tabelle der Focus in der Detail Tabelle aus diesen Datensatz Positioniert werden.

Über Lösungsansätze würde ich mich sehr freuen. Ich hoffe ich konnte mein doch etwas umfangreicheres Problem ein bisschen nahelegen.



Mit freundlichen Grüßen

Christian18
  Mit Zitat antworten Zitat
marabu

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

Re: Durch klick auf TTreeView in Tabelle DS Positionieren

  Alt 12. Jul 2006, 10:02
Hallo Christian,

vieles wird leichter, wenn du den Primärschlüssel (Annahme PK, Typ INTEGER) mitführst:

Delphi-Quellcode:
while not t1.Eof do
begin
  n := b.Items.AddChildObject(nil,
      t1.FieldByName('Feldname1').AsString,
      Pointer(t1.FieldByName('PK').AsInteger)
  );
  t2.First;
  while not t2.Eof do
  begin
    b.Items.AddChild(n,
        t2.FieldByName('Feldname2').AsString,
        Pointer(t2.FieldByName('PK').AsInteger)
    );
    t2.Next;
  end;
  t1.Next;
end;
Dann kannst du über die Ereignisse der TreeView die Positionierung in den DataSets vornehmen.

Grüße vom marabu
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#3

Re: Durch klick auf TTreeView in Tabelle DS Positionieren

  Alt 12. Jul 2006, 11:51
Hallo,

erst einmal vielen dank für die schnelle antwort und für den Tip. Ich habe mir deinen Tip zu herzen genommen und dies entsprechend in meinem Quelltext geändert. Trotzdem habe ich noch ein kleines Problem. Wie kann ich nun die Position ermittln und dann den Focus auf den Datensatz setzen???

MFG Christian18
  Mit Zitat antworten Zitat
marabu

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

Re: Durch klick auf TTreeView in Tabelle DS Positionieren

  Alt 12. Jul 2006, 14:42
Hallo Christian,

du positionierst über die Methode Delphi-Referenz durchsuchenLocate() des DataSet auf den Satz mit dem gewünschten PK. Wenn du sicherstellen kannst, dass die beiden Queries immer offen sind, dann kannst du dir statt des PK auch die Delphi-Referenz durchsuchenRecNo merken und diese Eigenschaft dann wieder setzen.

marabu
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#5

Re: Durch klick auf TTreeView in Tabelle DS Positionieren

  Alt 13. Jul 2006, 07:38
und wie komme ich wieder auf den Pointer raus den ich beim erzeugen setze???

EDIT: Hat jemand vieleicht auch ein paar Code schnipsel???
  Mit Zitat antworten Zitat
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#6

Re: Durch klick auf TTreeView in Tabelle DS Positionieren

  Alt 13. Jul 2006, 10:17
Zitat von Christian18:
und wie komme ich wieder auf den Pointer raus den ich beim erzeugen setze???
Du 'castest' den Pointer wieder zurück in einen integer, das ist ja das praktische, daß sich die beiden Typen so schön gegenseitig 'mißbrauchen' können, so kann man umgekehrt zB auch in die Tag-property einer Komponente ein ganzes anderes Objekt 'reinhängen'.

Zitat von Christian18:
EDIT: Hat jemand vieleicht auch ein paar Code schnipsel???
Bitt' schön:

Delphi-Quellcode:
procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
var iKeyValue: integer;
begin
  if Assigned(Node.Data) then
  begin
    iKeyValue := LongInt(Node.Data);
    if (Node.Level = 1) then //gehört zu t1
      t1.Locate('FeldNamePKt1',iKeyValue,[])
    else if (Node.Level = 2) then //gehört zu t2
      t2.Locate('FeldNamePKt2',iKeyValue,[]);
  end;
end;
Dann mußt du in dem Gerüst natürlich noch deine Fokus-Wechsel und was du sonst noch so machen willst unterbringen.

peinhard
  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 07:05 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