源代码下载   

链接:https://pan.baidu.com/s/1kJTB0duF0c3hA3578MwOPA
提取码:14tw

更多知识,参见自带DEMO_C:\Program Files (x86)\FMSoft\Framework\uniGUI\Demos\Desktop\Grid - DBTreeGrid

     ExpressDBTreeView学习(06)  原理一致。


 00]连接数据库

01]只要设置UniDBTreeGrid1为数据库里的IdField,和其对应的idParentField,
02] code,Parent_code可以不显示在界面上,显示其他内容代替, 直接显示Name
03]获得结点名称
04]有个UseArrows设为True时,更好看
05]全部展开/收缩/只展开一级节点
06]动态插入数据
07]获得从根到叶结点的所有路径结点名

08]结点名前显示默认图标


 

0]连接数据库,假设是SQLite数据库,数据连接如下图

SELECT ccc.code ,ccc.parent_code, ccc.name from ccc

然后就可以预览效果

Delphi10.3的DBGrid中memo类型显示内容而不是(WIDEMEMO)(01)ForSQLite

01]只要设置UniDBTreeGrid1为数据库里的IdField,和其对应的idParentField,即可,UniGui会自动生成树显示,不用添加一行代码

02] code,Parent_code可以不显示在界面上,显示其他内容代替, 直接显示Name

 

 在UniDBTreeGrid1的Columns上右键,Add item的一列

7

03]获得结点名称

拖一个UniDBText1到界面上,设置它的DataField,DataSource

04]有个UseArrows设为True时,更好看

 

05]全部展开/收缩/只展开一级节点

UniDBTreeGrid1.FullExpand;    //全部展开
UniDBTreeGrid1.FullCollapse;  //全部收缩

默认让UniDBTreeGrid展开一级节点

function store.nodeappend(sender, node, index, eOpts)
{
     if (node.raw.depth==1) {
      node.expand();
   }
}


06]动态插入数据

fdquery2.SQL.Text:='insert into aaa values(90,3,''涂涂as'');';
 fdquery2.ExecSQL;

 fdquery1.Refresh;

 

07]一定要点节点名,不能点 前头。获得从根到叶结点的所有路径结点名,假设树最多,只有四层

procedure TMainForm.UniDBTreeGrid1CellClick(Column: TUniDBGridColumn);
var
   aParentCode: string;  //  假设根结点 的 parent_code为 aaa
begin
      UniLabel1.Caption:= fdquery1.FieldByName('name').AsString ;;   //fdquery1  是整个 树
//======================================第 2 层 parent==========================================
aParentCode:=  fdquery1.FieldByName('parent_code').AsString ;
if  aParentCode='aaa' then exit
   else  begin
   fdquery2.Close;
   fdquery2.SQL.Text:='SELECT ccc.code ,ccc.parent_code, ccc.name from ccc where code =  '     //fdquery2是找当前结点的 父结点
                  + aParentCode;
   fdquery2.Open;
   UniLabel1.Caption:=    fdquery2.FieldByName('name').AsString +' / '+ UniLabel1.Caption ;
   aParentCode:= fdquery2.FieldByName('parent_code').AsString ;
end;
//=====================================第 3 层 parent===========================================
if  aParentCode='aaa' then exit
   else  begin
   fdquery2.Close;
   fdquery2.SQL.Text:='SELECT ccc.code ,ccc.parent_code, ccc.name from ccc where code =  '
                  + aParentCode;
   fdquery2.Open;
   UniLabel1.Caption:=    fdquery2.FieldByName('name').AsString +' / '+ UniLabel1.Caption ;
   aParentCode:= fdquery2.FieldByName('parent_code').AsString ;
end;
//======================================第 4 层 parent============================================
if  aParentCode='aaa' then exit
  else  begin
   fdquery2.Close;
   fdquery2.SQL.Text:='SELECT ccc.code ,ccc.parent_code, ccc.name from ccc where code =  '
                  + aParentCode;
   fdquery2.Open;
   UniLabel1.Caption:=    fdquery2.FieldByName('name').AsString +' / '+ UniLabel1.Caption ;
  end;
end;

 08]结点名前显示默认图标, 原理与  ExpressDBTreeView学习(06) 02]添加图标显示 类似