admin

[数据库] cxDBTreelist一些使用方法

一、导出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使用复选框实现多选 自动级联选择

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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的方式。


#1楼
发帖时间:5月前   |   查看数:0   |   回复数:0
游客组