用Popup Menu實現在TreeView中增加節點,再將該節點內容插入到數據庫中,如何實現?

解决方案 »

  1.   

    天! 这可不是一句话能说完的问题……你会不会TreeView的基本操作呀??会了再看看SQL语句和数据集控件基本使用,会了这三样我在教你怎么做你不会是来要程序的吧
      

  2.   

    这些应该可以解决你的问题
    unit TreeFunc;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, ComCtrls, DB, Forms, Dialogs;function  TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
    function  TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
    function  TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
    procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);implementation
    function TreeAddItem(Sender: TTreeView; ItemList: TStrings; Book: TBook; Resort: Boolean): TTreeNode;
    var
       ThisNode, Node: TTreeNode;
       I: Integer;
    begin
         Node := nil;   //nil = level 0 has no parent node
                        //this is checked by TreeFindItem
         for I := 0 to Itemlist.count -1 do
         begin
              ThisNode := TreeFindItem(Sender, node, Itemlist[i]);
              if ThisNode <> nil then Node := ThisNode else
              begin
                   if I < Itemlist.count -1 then
                   begin
                        if I = 0 then Node := Sender.items.Add(Node, Itemlist[i])
                        else Node := Sender.items.AddChild(Node, Itemlist[i]);
                   end else
                   begin
                        if I = 0 then Node := Sender.items.AddObject(Node, Itemlist[i], Book)
                        else Node := Sender.items.AddChildObject(Node, Itemlist[i], Book);
                   end;
                   Node.stateIndex := Node.level + 1;
                   if Resort and (Node.parent <> nil) then Node.parent.alphasort; 
              end;
         end;
         Result := Node;
    end;function TreeFindItem(Sender: TTreeView; NodeItem: TTreeNode; Name: String): TTreeNode;
    begin
         if NodeItem = nil then NodeItem := Sender.items.getfirstnode
         else NodeItem := NodeItem.getfirstchild;
    //NodeItem is now the first item of the desired level
    //if this level has no items, NodeItem is nil     if (NodeItem <> nil) and (NodeItem.text <> Name) then
         repeat
               NodeItem := NodeItem.getnextsibling;
         until (NodeItem = nil) or (NodeItem.text = Name);
         Result := NodeItem;
    end;function TreeGetItem(Sender: TTreeView; ItemList: TStrings): TTreeNode;
    begin
         Result := TreeAddItem(Sender, Itemlist, nil, false);
    end;procedure TreeDeleteItem(Sender: TTreeView; ItemList: TStrings; Level: Integer);
    var
       Node, Parent: TTreeNode;
    begin
         Node := TreeGetItem(Sender, ItemList);
         while Node.level >= Level do
         begin
              Parent := Node.parent;
              Node.delete;
              if (Parent = nil) or (Parent.hasChildren) then break;
              Node := Parent;
         end;
    end;
    end.