Wat ik uit jou code haal, is dat je een TjvDBTreeview kopieert naar een frmDummy.tvDummy.Items. Dus alleen items zijn bekend welke geen referentie meer hebben van de dataset.
* bron stackoverflow
Delphi Code:
var Node: TTreeNode;
Node := TreeView.Items.GetFirstNode;
while Node <> nil do
begin
if Node.Selected then
begin
//zoek naar een record in de dataset en geef de id terug.
end;
Node := Node.GetNextSibling;
end;
Zelf maak ik gebruik van een standaard Treeview en sla de id op als een pointer in node.data.
Daardoor kan ik meteen naar een record in mijn dataset als ik een node heb geselecteerd.
Dit is een voorbeeld, die ik gebruik in Lazarus (maar werkt net zo goed in Delphi)
Delphi Code:
procedure TMyStart.FillTonode(SQLQuery : TSQLQuery);
var node : TTreenode;
newnode : TTreenode;
Achternaam : string;
Tussenvoegsels : string;
Voornaam : string;
begin
Achternaam := SQLQuery.FieldByName('achternaam').AsString;
node := GetNodeByText(copy(Achternaam,1,1));
if node <> nil then
begin
if SQLQuery.FieldByName('tussenvoegsels').IsNull then
Tussenvoegsels := ''
else
Tussenvoegsels := SQLQuery.FieldByName('tussenvoegsels').AsString;
Voornaam := SQLQuery.FieldByName('voornaam').AsString;
FFullName := Achternaam + ', ' + Voornaam;
if trim(Tussenvoegsels) <> '' then
FFullName := FFullName + ' ' + Tussenvoegsels;
newnode := FDBTreeView.Items.AddChild(Node, FFullName);
newnode.Data:= pointer(SQLQuery.FieldByName('ID').AsInteger);
end;
end;
Of virtualtreeview gebruiken
Bookmarks