TREEVIEW的问题(5分)

  • 主题发起人 主题发起人 fanwei
  • 开始时间 开始时间
F

fanwei

Unregistered / Unconfirmed
GUEST, unregistred user!
select distinct year from table
where id=10
可能有这么几条入选2002年、2002年、2002年、2003年、2004年、2004年
怎样在TREEVIEW中将每一年作为一个父节点而没有重复?就象下面的样子?
+2002
+2003
+2004
 
顺便再问,怎么把一个TREEVIEW清空?
 
清空:
treeview1.Items.Clear;
 
adoquery.close;
adoquery1.sql.text:='select distinct year from table where id=10';
adoquery1.open;
adoquery1.first;
treeview1.Items.Clear;
while not adoquery1.eof do
begin
treeview1.items.add(nil,adoquery1.fields[0].asstring);
adoquery1.next;
end;
adoquery1.close;
 
但是这样会产生重复的节点啊!
 
这样不会重复的
因为 adoquery1中数据不重复
>> select distinct year from table
 
sorry,我再解释一下吧,程序是这样的:表里的FIELD是A1,A2,A3,A4..A30
A1----YEAR 2002、2003.....
A2----MONTH 01....12
A3----LINE_NO 1...20
A4..A30 --数据
每年每月有20条数据,但年和月即A1,A2都是一样的
要求按年生成PARENT,按月生成CHILD对应年
我的程序是这样的,但是有点小问题
var node:ttreenode;
tempstring:string;
i,j:integer;
begin
with query1 do

begin
close;
sql.add('select distinct a1 from table');
sql.add('where A3=:lineno');
parambyname('lineno').asstring:='15';
prepare;
open;
end;
for i:=1 to query1.recordcount do
begin
if not query1.eof then
begin
tempstring:=query1.fieldbyname('a1').asstring;
query1.next;
if query1.fieldbyname('a1').asstring<>tempstring then
begin
node:=Items.Add(nil,tempstring);
end;
end
else
begin
node:=items.add(nil.tempstring);
end;
with Query2 do
begin
close;
sql.clear;
sql.add('select distinct A2 from table');
sql.add('where (a1=:lineno) and (B0=:query1a1)');
parambyname('lineno').asstring:='15';
parambyname('query1a1').asstring:=query1.fieldbyname('a1').asstring;
prepare;
open;
end;
for j:=1 to query2.recordcount do
begin
Items.AddChild(node,Query2.FieldbyName('a2').asstring);
query2.Next;
end;
end;
 
幫你改一下:
var treenode:ttreenode;
adoquery1.close;
adoquery1.sql.text:='select distinct a1 from table where A3=:lineno';
adoquery1.Parameters.ParamByName('lineno').Value:='15';
adoquery1.open;
adoquery1.first;
treeview1.Items.Clear;
while not adoquery1.eof do
begin
treenode:=treeview1.items.add(nil,adoquery1.fields[0].asstring);
adoquery2.close;
adoquery2.sql.text:='select distinct A2 from table where (a3=:lineno) and (a1=:query1a1)';
adoquery2.Parameters.ParamByName('lineno').Value:='15';
adoquery2.Parameters.ParamByName('query1a1').Value:=adoquery1.fields[0].asstring;
adoquery2.open;
adoquery2.first;
while not adoquery2.eof do
begin
treeview1.Items.AddChild(treenode,adoquery2.fields[0].asstring);
adoquery2.next;
end;
adoquery2.close;
adoquery1.next;
end;
adoquery1.close;
兩個循環,若有問題通知我。
 
谢了,给分,不过我用的不是ADO,呵呵,但是谢谢给我思路!
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部