⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 delphi 的 treeview应用演示
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
    procedure AddClass(AId:integer;FatherNode:TTreeNode);//添加分类过程
    procedure AddDataToDB(CurrNode,FatherNode:TTreeNode);//添加实际数据到数据库
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.AddClass(AId: integer;FatherNode:TTreeNode);
var
    QryTmp:TADOQuery;
    myNode:TTreeNode;
    myLabel:TLabel;
begin
    QryTmp:=TADOQuery.Create(self);
    QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
    QryTmp.SQL.Add('select * from tb1');
    QryTmp.SQL.Add('where FatherId='+inttostr(AId));
    QryTmp.Open;
    while not QryTmp.Eof do
    begin
        myNode:=Treeview1.Items.AddChild(FatherNode,QryTmp.fieldbyname('CName').AsString);

        //创建标签,caption存放各分支的AutoId表识
        myLabel:=TLabel.Create(self);
        myLabel.Visible:=false;
        myLabel.Caption:=QryTmp.fieldbyname('AutoId').AsString;
        myNode.Data:=myLabel;

        AddClass(QryTmp.fieldbyname('AutoId').AsInteger,myNode); //递归调用过程
        QryTmp.Next;
    end;
    QryTmp.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    AddClass(0,nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    strName:string;
    myNode:TTreeNode;
begin
    strName:=inputbox('新增公司','请输入分类名称:  ','');
    strName:=trim(strName);
    if strName='' then
        exit;
    myNode:=treeview1.Items.Add(treeview1.Selected,strName);
    if assigned(treeview1.Selected) then
        AddDataToDB(myNode,treeview1.Selected.Parent)
    else
        AddDataToDB(myNode,nil);
    myNode.selected:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
    strName:string;
    myNode:TTreeNode;
begin
    strName:=inputbox('新增部门','请输入分类名称:  ','');
    strName:=trim(strName);
    if strName='' then
        exit;
    myNode:=treeview1.Items.AddChild(treeview1.Selected,strName);
    AddDataToDB(myNode,treeview1.Selected);
    myNode.selected:=true;
end;

procedure TForm1.AddDataToDB(CurrNode,FatherNode: TTreeNode);
var
    myLabel:TLabel;
    QryTmp:TADOQuery;
    AId:integer;
begin
    if not assigned(FatherNode) then
        AId:=0
    else if not assigned(FatherNode.Data) then
        AId:=0
    else
        AId:=strtoint(TLabel(FatherNode.Data).caption);
    QryTmp:=TADOQuery.Create(self);
    QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
    QryTmp.SQL.Add('select * from tb1');
    QryTmp.SQL.Add('where FatherId='+inttostr(AId));
    QryTmp.Open;
    QryTmp.Append;
    QryTmp['FatherId']:=AId;
    QryTmp['CName']:=CurrNode.Text;
    QryTmp.Post;

    //创建记录currNode的AutoId表识标
    myLabel:=TLabel.Create(self);
    myLabel.Visible:=False;
    MyLabel.Caption:=QryTmp.fieldbyname('AutoId').AsString;
    CurrNode.Data:=myLabel;
    
    QryTmp.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
    QryTmp:TADOQuery;
begin
    if not assigned(treeview1.Selected) then
        exit;
    if application.MessageBox('是否删除分类及下级分类?','提示',mb_yesno+mb_iconquestion)=idno then
        exit;
    //删除下级别分类
    QryTmp:=TADOQuery.Create(self);
    QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
    QryTmp.SQL.Add('delete * from tb1');
    QryTmp.SQL.Add('where FatherId='+TLabel(Treeview1.Selected.data).Caption);
    QryTmp.ExecSQL;
    QryTmp.SQL.Clear;
    QryTmp.SQL.Add('delete * from tb1');
    QryTmp.SQL.Add('where AutoId='+TLabel(Treeview1.Selected.data).Caption);
    QryTmp.ExecSQL;
    Treeview1.Selected.Delete;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
    QryTmp:TADOQuery;
    strName:string;
begin
    if not assigned(treeview1.Selected) then
        exit;
    strName:=inputbox('修改','请输入新的名称: ','');
    strName:=trim(strName);
    if strName='' then
        exit;
    //删除下级别分类
    QryTmp:=TADOQuery.Create(self);
    QryTmp.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+extractfilepath(application.ExeName)+'test.mdb;Persist Security Info=False';
    QryTmp.SQL.Add('update tb1 set CName='+''''+strName+'''');
    QryTmp.SQL.Add('where AutoId='+TLabel(Treeview1.Selected.data).Caption);
    QryTmp.ExecSQL;
    Treeview1.Selected.Text:=strName;
end;

end.
//autoid cname fatherid

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -