delphi 再说TcxDBTreeList
1.当我们绑定好数据库之后,默认是全部折叠的,只显示 + 全部
cxDBTreeList1.Root.getFirstChild.Expand(False); //只展开第一层目录,注意除非是在create或者show事件,否则对于已经被操作过的目录,必须先折叠所有节点,才会有效
cxDBTreeList1.FullExpand; //展开所有节点
cxDBTreeList1.FullCollapse; //折叠所有节点
if cxDBTreeList1.FocusedNode.Level=1 then //判断是不是子节点,1是子节点,0是父节点
cxDBTreeList1.FocusedNode.Texts[0]; //当前选择的数据,也可以直接取FDQuery或者其他数据集中取
cxDBTreeList1.FocusedNode.Parent.Texts[0]; //获取当点选中节点的父节点,如果之上还有父父父...节点呢?思考一下
cxDBTreeList1.FocusedNode.HasChildren; //判断是否存在子节点
2.列标题默认是左对齐的,如果让列标题居中显示?
右击cxDBTreeList1-Columns,弹出列管理窗口,在caption下设置 AlignHorz 为 taCenter 即可.顺便说一下 AlignVert 是设置标题垂直方向上的对齐方式的.
3.FindPanel,也就是搜索框.
特点:
1.它太丑了.还不能拓展功能.
2.它太丑了.按钮还不能自定义.
3.它太丑了.样式也不能自定义.
4.基本功能它都能满足,对UI无要求的话,用它就对了
自定义搜索框:我这里只加了一个scgpEdit,其他控件你们自己按业务来加
大概需求如下:
为了让搜索结果,显示出节点结果,我花了一个早上来想这条SQL,我SQL学得也很浅,不知道有没有更优解,如果有的话,请给我留言(我这里用的是ACCESS数据库)
procedure T新增编码.ssEditChange(Sender: TObject); var isql, str: string; begin with FDQCK do begin Close; isql := 'select * from 仓库列表 WHERE 禁用=0 '; //默认返回全部数据 str := UpperCase(Trim(ssEdit.Text)); if str <> '' then //如果有在搜索,则返回带节点结构的数据集 isql := 'select * from 仓库列表 where 仓库名称=' + QuotedStr('全部') + //root节点 ' union ' + 'select * from 仓库列表 where 禁用= 0 and 仓库名称 like ' + QuotedStr('%' + str + '%') + //搜索结果 ' union ' + 'select 仓库列表.* from( 仓库列表 RIGHT join ' + '(select * from 仓库列表 where 禁用= 0 and 仓库名称 like ' + QuotedStr('%' + str + '%') + ') AS A ' + //父节点 ' on 仓库列表.仓库ID = A.父级ID)'; SQL.Text := isql; Open(); cxDBTreeList1.FullExpand; //全部展开 end; end;
效果如下:
//获取节点目录,可以通过TcxDBTreeList的OnFocusedNodeChanged事件来实现 procedure TfraModuleSetup.cxDBTreeList1FocusedNodeChanged(Sender: TcxCustomTreeList; APrevFocusedNode, AFocusedNode: TcxTreeListNode); function ShowCxDBTreeListNodeValues(ACxDBTreeList: TcxDBTreeList): string; var S: string; aNode: TcxTreeListNode; i: Integer; begin aNode := ACxDBTreeList.FocusedNode; for i := aNode.Level downto 0 do begin if i = ACxDBTreeList.FocusedNode.Level then S := aNode.Values[0] else S := aNode.Values[0] + ' / ' + S; aNode := aNode.Parent; Result := S; end; end; begin WHInfo.Caption := ShowCxDBTreeListNodeValues(cxDBTreeList1); end;
效果如下(右上角,仓库信息):