Hallo Leute,
ich versuche eine Baumansicht im VST darzustellen. Dazu möchte ich aus zwei miteinander verknüfte
SQL-Tabellen
im VST anzeigen ohne Spalten (wie eine Explorer Ansicht). Ich habe schon alle Foren nach einer Lösung durchsucht,
ohne Erfolg. Leider ist die VST schwer zu Verstehen und die Doku dazu.. na ja, hab schon bessere Beschreibungen gesehen.
Bitte kann mir da jemand weiterhelfen.
Bitte nur die VST. Ich habe es auch mit TDBVST probiert, ist aber nicht das was ich nutzen kann.
Dafür benötigt man eigene Tabellen.
Meine Aufgabe: Struktur der Baumansicht
WoNumber=10001
+++++|__PartName=P227
++++++++++++++++++|__Material=1.4301
++++++++++++++++++|__Thickness=6
++++++++++++++++++|__QTY=5
++++++++++++++++++|__QTYOrdered=5
+++++|__PartName=P237
++++++++++++++++++|__Material=1.4403
++++++++++++++++++|__Thickness=8
++++++++++++++++++|__QTY=51
++++++++++++++++++|__QTYOrdered=51
+++++|__PartName=P603
++++++++++++++++++|__Material=SS
++++++++++++++++++|__Thickness=12
++++++++++++++++++|__QTY=10
++++++++++++++++++|__QTYOrdered=10
WoNumber=10002
+++++|__PartName=P701
++++++++++++++++++|__Material=ST37
++++++++++++++++++|__Thickness=5
++++++++++++++++++|__QTY=5
++++++++++++++++++|__QTYOrdered=5
Ich habe zwei
SQL-Tabellen die über die Spalte WoNumber verknüpft sind. Siehe Bild
Dort sieht man auch gleich wo das Problem liegt.
Ich dachte ich gehe den richtigen Weg wenn ich die OnInitNode und OnGetText nutze, krieg das aber nicht hin.
Hier meine Vorgehensweise
type
// Definition der Daten:
PMyData = ^TMyData;
TMyData = record
WONumber: integer;
Level: integer;
CustomerName:String[100];
PartName:String[100];
Material:String[50];
Thickness:Double;
end;
procedure TForm1.RebuildTree;
begin
VTree.RootNodeCount := ADOWo.RecordCount;
VTree.NodeDataSize := SizeOf(TMyData);
end;
procedure TForm1.VTreeGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var data:PMyData;
begin
data := Sender.GetNodeData(Node);
case sender.GetNodeLevel(node) of
0: celltext:=inttostr(data.WONumber);
1: celltext:=data.PartName;
2: celltext:=data.Material; // keine Ahnung was hier geschehen muss
end;
end;
procedure TForm1.VTreeInitChildren(Sender: TBaseVirtualTree;
Node: PVirtualNode; var ChildCount: Cardinal);
begin
// set childcount to the detail dataset's recordcount
ADOWO.RecNo := node.Index+1;
childcount := ADOPART.RecordCount;
end;
procedure TForm1.VTreeInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var data:PMyData;
begin
data := Sender.GetNodeData(Node);
if Sender.GetNodeLevel(Node) = 0 then
begin
// master node - WoOrderNumber
ADOWO.RecNo := node.Index + 1;
data.WONumber := ADOWO.FieldByName('WONumber').asInteger;
if ADOPART.RecordCount > 0 then InitialStates:=InitialStates+[ivsHasChildren];
// ******* bis hierhin alles ok
end else
begin
// detail node - order
if Sender.GetNodeLevel(Node) = 1 then InitialStates:=InitialStates+[ivsHasChildren];
data.PartName := ADOPART.fieldbyname('PartName').AsString;
// ******* ab hier beginnen die Probleme
data.Material := 'Material : ' + ADOPART.fieldbyname('Material').AsString;
end;
end;
Danke schon mal für...
DETLEF