TREEVIEW中如何存储其他信息,请指教!(100分)

  • 主题发起人 主题发起人 龙飞九天
  • 开始时间 开始时间

龙飞九天

Unregistered / Unconfirmed
GUEST, unregistred user!
我建立一个不定级别树的数据库,采用三个字段 ID,TEXT,UPID
ID:自动编号 长整型
UPID:长整型
TEXT:字符串
建树时显示的是TEXT字段值,如何将ID,UPID 存入TREEVIEW的ITEM中呢?
这样可以提高建树的速度
或者各位有更好的方法或源代码,不胜感谢!
 
代码:
[:D][:D]
多谢多谢!
 
使用指针将信息保存至在节点中,使用举例如下
定义
type
PStr = ^string;
实现
var
PID:PStr
New(PID);
PID^ := 'AAA';你要保存的字符串
//加节点
Tree.Items.AddChildObject(ObjTreePos, 'BBB', PID);

访问节点的指针信息
PStr(Tree.Selected.Data)^

如果要保存其他信息,请重新定义记录型指针

 
type
PxNodeData=^TxNodeData;
TxNodeData=record
ID:integer;
UPID:integer;
end;

var
vNodeData: PxNodeData;
vNode: TTreeNode;
begin
vNode := TreeView1.Items.Add(nil,'文本');
New(vNodeData);
vNodeData.ID := 100;
vNodeData.UpID := 100;
vNode.Data := vNodeData;
end;

//记得使用完后释放内存
 
象楼上两位老兄说的一样用DATA记录结构的指针,我做BOM的时候也用过,用得正确的话可以省很多事,就是
麻烦一点,你的长整型的变量可以钻个空子,保存在相应类型的空闲属性中,比如TAG,或者如果
你TREEVIEW中不用CHECKBOX的话,还可以保存在stateindex中
 
用指针吧。。比较有利于后面的程序地开发。。

[:)]
 
TreeView1.Items.Clear;
DataModule2.ADOTable1.First;
for I:=0 to DataModule2.ADOTable1.RecordCount-1 do
begin
T:=False;
Str1:=Trim(DataModule2.ADOTable1.FieldByName('字段1').AsString);
Str2:=Trim(DataModule2.ADOTable1.FieldByName('字段2').AsString);
if TreeView1.Selected<>nil then
if Str1=TreeView1.Selected.Text then
begin
TreeView1.Items.AddChild(TreeView1.Selected,Str2);
T:=True;
end
else
begin
for D:=0 to TreeView1.Items.Count-1 do
if Str1=TreeView1.Items[D].Text then
begin
TreeView1.Selected:=TreeView1.Items[D];
TreeView1.Items.AddChild(TreeView1.Items[D],Str2);
T:=true;
Break;
end;
end;
if T=False then
begin
if TreeView1.selected=nil then
TreeView1.Items.AddChild(nil,Str1)
else
TreeView1.Items.Add(TreeView1.Items[0],Str1);
for D:=0 to TreeView1.Items.Count-1 do
if Str1=TreeView1.Items[D].Text then
begin
TreeView1.Selected:=TreeView1.Items[D];
TreeView1.Items.AddChild(TreeView1.Items[D],Str2);
Break;
end;
end;
DataModule2.ADOTable1.Next;
end;
TreeView1.FullCollapse;
 
多人接受答案了。
 
后退
顶部