通过网盘分享的文件:TreeViewFromDB.rar
链接: https://pan.baidu.com/s/1ZJhxLBM_YQ07fpfga0hMmQ 提取码: v893
ExpressDBTreeView学习(06)

procedure TForm1.AddChildNodes(TreeView: TTreeView; ParentNode: TTreeNode); var Query: TFDQuery; ChildNode: TTreeNode; begin Query := TFDQuery.Create(nil); try Query.Connection := FDConnection1; Query.SQL.Text := 'SELECT * FROM aTable WHERE ParentID = '+ IntToStr( Integer(ParentNode.Data))+' ORDER BY ParentID'; Query.Open; while not Query.Eof do begin ChildNode := TreeView.Items.AddChild(ParentNode, Query.FieldByName('Name').AsString); ChildNode.Data := Pointer(Query.FieldByName('ID').AsInteger); AddChildNodes(TreeView, ChildNode); // 递归调用 自己 Query.Next; end; finally Query.Free; end; end;
procedure TForm1.Button1Click(Sender: TObject); var RootNodes: TList; i: Integer; RootNode, CurrentNode: TTreeNode; begin TreeView.Items.BeginUpdate; try TreeView.Items.Clear; // 首先添加所有根节点 RootNodes := TList.Create; FDQuery1.First; while not FDQuery1.Eof do begin if (FDQuery1.FieldByName('ParentID').IsNull) or (FDQuery1.FieldByName('ParentID').AsInteger = 0) then begin RootNode := TreeView.Items.AddChild(nil, FDQuery1.FieldByName('Name').AsString); RootNode.Data := Pointer(FDQuery1.FieldByName('ID').AsInteger); RootNodes.Add(RootNode); end; FDQuery1.Next; end; // 递归添加子节点 for i := 0 to RootNodes.Count - 1 do begin AddChildNodes(TreeView, TTreeNode(RootNodes[i])); end; RootNodes.Free; finally TreeView.Items.EndUpdate; end; TreeView.FullExpand; end;
procedure TForm1.TreeViewGetImageIndex(Sender: TObject; Node: TTreeNode); begin If Node.Level = 0 Then //根结点 Node.IMAGEINDEX := 0 Else If (Node.Level <> 0) And (Node.HasChildren = False) Then //叶结点 Node.IMAGEINDEX := 3 Else If (Node.Level <> 0) And (Node.HasChildren) Then // 中间结点 Node.IMAGEINDEX := 1; end;
procedure TForm1.TreeViewGetSelectedIndex(Sender: TObject; Node: TTreeNode); begin If Node.Level = 0 Then Node.SelectedIndex := 0 Else If (Node.Level <> 0) And (Node.HasChildren) Then Node.SelectedIndex := 1 Else If (Node.Level <> 0) And (Node.HasChildren = False) Then Node.SelectedIndex := 4; If (Node.Level > 0) And (Node.HasChildren) Then Node.SelectedIndex := 2; end;
procedure TForm1.TreeViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Var xyNode: TTreenode; begin xyNode := TreeView.GetNodeAt(X, Y); //获得结点 If Assigned(xyNode) Then showmessage(xyNode.Text); // 显示 结点 名 end;

浙公网安备 33010602011771号