treeview分三层,依次为:年、月、日。初始化,如何实现根节点和第二层节点不会重复创建?
我写了如下代码:
------------------------------------------------------------------------------------------
while not adoquery1.Eof do
begin
riqi:=adoquery1.Fieldbyname('dattte').AsString;
nian:=copy(riqi,1,4)+'年';
yue:=copy(riqi,6,2)+'月';
ri:=copy(riqi,9,2)+'日';
RootNode :=treeview1.Items.Add(nil,nian)
subnode:=treeview1.Items.AddChild(rootnode,yue);
treeview1.Items.AddChild(subnode,ri);
end;
---------------------------------------------------------------------------------------------
导致年、月、日三层节点数一样多,应该如何修改?

解决方案 »

  1.   

    给你做了一下,因为没有数据库,权且用一个字符串数组代替,自己看着修改吧unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        function yearExist(y:string):TTreeNode;
        function monthExist(y:TTreeNode; m:string):TTreeNode;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      y,m,d:string;
      s:string;
      DateArray:array[0..7] of string;
      yearNode,MonthNode,DayNode:TTreeNode;
    begin
      DateArray[0]:='20000120';
      DateArray[1]:='20000121';
      DateArray[2]:='20000119';
      DateArray[3]:='20010101';
      DateArray[4]:='20010120';
      DateArray[5]:='20010221';
      DateArray[6]:='20010119';
      DateArray[7]:='20010102';
      for i:=0 to 7 do
      begin
        y:=copy(DateArray[i],1,4)+'年';
        m:=copy(DateArray[i],5,2)+'月';
        d:=copy(DateArray[i],7,2)+'日';
        yearNode:=yearExist(y);
        if yearNode=nil then
          yearNode:=TreeView1.Items.AddChild(nil,y);
        MonthNode:=monthExist(yearNode,m);
        if MonthNode=nil then
          MonthNode:=TreeView1.Items.AddChild(yearNode,m);
        //日就不怕重复了吧,直接添加了
        TreeView1.Items.AddChild(MonthNode,d);
      end;
    end;function TForm1.monthExist(y: TTreeNode; m: string): TTreeNode;
    var
      node:TTreeNode;
    begin
      result:=nil;
      node:=y.getFirstChild;
      while node<>nil do begin
        if node.Text=m then
        begin
          result:=node;
          exit;
        end;
        node:=y.GetNextChild(node);
      end;
    end;function TForm1.yearExist(y: string): TTreeNode;
    var
      node:TTreeNode;
    begin
      result:=nil;
      if TreeView1.Items.Count=0 then
        exit;
      node:=TreeView1.Items[0];
      while node<>nil do begin
        if node.Text=y then
        begin
          result:=node;
          exit;
        end;
        node:=node.getNextSibling;
      end;
    end;end.
      

  2.   

    这个你读取数据库时排下序就好了
    select * from 你的数据表 order by 日期