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;
---------------------------------------------------------------------------------------------
导致年、月、日三层节点数一样多,应该如何修改?
我写了如下代码:
------------------------------------------------------------------------------------------
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;
---------------------------------------------------------------------------------------------
导致年、月、日三层节点数一样多,应该如何修改?
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.
select * from 你的数据表 order by 日期