您的位置:首页 > 其它

cxDBTreelist一些使用方法

2017-07-07 23:45 531 查看
一、导出EXCEL TXT HTML:

uses cxTLExportLink;

cxExportTLToEXCEL(dm.SaveDialog.FileName,cxDBTreeList1,TRUE,TRUE); //轉入EXCEL
cxExportTLToTEXT(dm.SaveDialog.FileName,cxDBTreeList1,TRUE,TRUE); //轉入TXT
cxExportTLToHTML(dm.SaveDialog.FileName,cxDBTreeList1,TRUE,TRUE); //轉入HTML





---------------------------------------------------------------------------------------------------------------

二、cxdbtreelist1共多少条记录: showmessage(inttostr(cxtreelist1.VisibleCount));

cxdbtreelist1当前记录的索引: showmessage(inttostr(cxTreeList1.FocusedNode.VisibleIndex));

cxdbtreelist1有多少列: showmessage(inttostr(cxtreelist1.VisibleColumnCount));

cxdbtreelist1当前记录的层级: showmessage(inttostr(cxTreeList1.FocusedNode.Level));

cxdbtreelist1自动展开: cxtreelist1.fullexpand; //自动展开

cxdbtreelist1自动折叠 : cxtreelist1.FullCollapse;

cxdbtreelist1取上级节点内容: ShowMessage(cxdbTreeList1.FocusedNode.Parent.Values[0]);

三、新增、删除结点:

增加同级结点:

procedure Tfr_bommglin.cxButton1Click(Sender: TObject);
var node:TcxTreeListNode;
begin

node:=cxdbTreeList1.FocusedNode.Parent.AddChild;
node.Values[0]:='aaaaa';
node.Values[1]:=node.Level;

end;

增加下级节点:

procedure Tfr_bommglin.cxButton2Click(Sender: TObject);
var node:TcxTreeListNode;
begin
node:=cxdbTreeList1.FocusedNode.AddChild; //增加子节点在首记录:cxdbTreeList1.FocusedNode.AddChildFirst;
node.Values[0]:='aaaaa';
node.Values[1]:=node.Level+1;
cxdbTreeList1.FocusedNode.Expanded:=true; //展开子节点
end;

删除节点:

ClientDataSet1.GetBookmark;
cxdbTreeList1.FocusedNode.Delete; //删除当前节点记录;删除当前节点的子节点:cxdbTreeList1.FocusedNode.DeleteChildren;
cxDBTreeList1.DataController.GotoBookmark;

多节点选择删除:

cxDBTreeList1.DeleteSelection

数据集控制:

cxDBTreeList1.DataController.dataset.GotoFirst; //GotoLast gotonext gotoprev GotoBookmark

cxDBTreeList1.DataController.dataset.Append; //cancel updatedata

cxDBTreeList1.DataController.dataset.edit;

根据cxdbtreelist随clientdataset1记录定位:

首先:bl:=cxDBTreeList1.DataController.DataSet.GetBookmark;

接着:cxDBTreeList1.DataController.DataSet.GotoBookmark(bl);
cxDBTreeList1.SetFocus;

多结点选择取记录:

for i:=0 to cxDBTreeList1.SelectionCount-1 do
begin
ShowMessage(cxDBTreeList1.Selections[i].Values[1]);
end;

-------------------------------------------------------------------------------------------

三、增加节点图片:

先在窗体上放ImageList关联到cxDBTreeList,在cxDBTreeList的GetNodeImageIndex事件中写如下:

procedure cxDBTreeList1GetNodeImageIndex(Sender:TcxCustomTreeList; ANode: TcxTreeListNode; AIndexType:
                      TcxTreeListImageIndexType; var AIndex: TImageIndex);
var
i :Integer;
begin
//给树结点加上图标
for i := 0 to ANode.ValueCount do
begin
  if ANode.Level = 0 then
begin
ANode.ImageIndex := 0;
end
else
if ANode.Level = 1 then
begin
ANode.ImageIndex := 2;
end
else
if ANode.Level = 2 then
begin
ANode.ImageIndex := 1;
end;
end;
end;

实现 cxTreeList使用复选框实现多选 自动级联选择

var
RootNode,SonNode:TcxTreeListNode;
qryRoot,qrySon:TADOQuery;

cxTreeList1.OptionsView.CheckGroups:=true;
cxTreeList1.Root.CheckGroupType:=ncgCheckGroup;
qryRoot:=TAdoQuery.create(nil);
qrySon:=TAdoQuery.create(nil);
qryRoot.Connection:=con1;
qrySon.Connection:=con1;
try
with qryRoot do
begin
Close;
SQL.Text:='SELECT DISTINCT  PID,Caption FROM dbo.Parent';
Open;
qrySon.Close;
qrySon.SQL.Text:='SELECT PID,SID,Caption FROM dbo.Son  ORDER BY PID,SID';
qrySon.Open;
cxTreeList1.Clear;
DisableControls;
while not eof do
begin
RootNode:=cxTreeList1.Add;
RootNode.CheckGroupType:=ncgCheckGroup;
RootNode.Texts[0]:=FieldByName('PID').AsString+'.'+FieldByName('Caption').AsString;
RootNode.Texts[1]:=FieldByName('PID').AsString;
RootNode.Enabled:=False;
with qrySon do        begin          DisableControls;
Filtered:=False;
Filter:='PID='+QuotedStr(FieldByName('PID').AsString);
Filtered:=True;
while not Eof  do
begin
SonNode:=RootNode.AddChild;
SonNode.Texts[0]:=trim(FieldByName('SID').AsString)+'.'+FieldByName('Caption').AsString;
SonNode.Texts[1]:=trim(FieldByName('SID').AsString);
Next;
end;
EnableControls;
end;
Next;
end;
EnableControls;
end;
finally
qryRoot.Free;
qrySon.Free;
end;


  

获取CxDBTreeList所有父节点

function ShowCxDBTreeListNodeValues(ACxDBTreeList: TcxDBTreeList): string;
var
S:string;
aNode:TcxTreeListNode;
i:Integer;
begin
if ACxDBTreeList.Visible then
if ACxDBTreeList.FocusedNode.HasChildren then //只显示最底层,如果要显示全部 去掉这个条件
Exit;
aNode:=ACxDBTreeList.FocusedNode;
for i:=aNode.Level downto 0 do
begin
if i=ACxDBTreeList.FocusedNode.Level then
S:=aNode.Values[1]
else
S:=aNode.Values[1]+'->'+S;
aNode:=aNode.Parent;
Result:=S;
end;
end;

1,在cxTreeList的treeview内添加的checkbox能否设置一下实现不联动? 我现在选中2,其子节点也全部被选中了,我想实现一个一个的单独可以选中,就是所有子节点全部被选中,其父节点也不跟随子节点的状态变化。 2,把cxTreeList某一列的properties的属性设置为RadioGroup,Items内只设置了一个值“允许” 我如何能动态设置RadioButton的选中状态? 当然properties的属性也可以设置为CheckBox,使用Newnode.Values[3] := False;就可以设置checkbox为非选中状态,但我是想学习一下RadioGroup的用法。

咋自动选中子节点的? 俺这儿想尽了办法都选不中子节点 大哥指点俺一下! 就是你那个联动咋弄上去的?

cxTreeList1.OptionsView.CheckGroups := True; cxTreeList1.Root.CheckGroupType := ncgCheckGroup; var NewNode: TcxTreeListNode; begin NewNode:=cxTreeList1.Add; NewNode.CheckGroupType := ncgCheckGroup;

顶顶,再帮忙看看

帮忙看看,来个回复也好啊,如何让我结贴呢

CheckGroupType := ncgCheckGroup; 除了这种属性,还有另一种类似 RadioGroup的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: