一个自己写的有关数据库的treeview.
自己寫的一個有關樹形結構的函數,與大家共享.
procedure MakeTreeEx(Query: TadoQuery; TreeView: TTreeView;
? DisplayName:string;Id:string;pid:string);
type
? recNode=record
??? Id:string;
??? Name:string;
??? PId:string;
? end;
? PRecNode=^recnode;
? {遞歸算法要有終止的條件}
? procedure AppendChild(var treeview:TTreeView;node:TTreeNode;
??? var strlst:TStringList);
? var
??? strTmp:string;
??? i:Integer;
??? nodeTmp:TTreeNode; {子結點}
??? ps:pstring;
? begin
????? //ShowMessage(strlst.Text+'要查找的PID是:'+pstring(node.Data)^);
??? while strlst.IndexOf(trim(pstring(node.Data)^))<>-1 do
??? begin
????? i:=strlst.IndexOf(pstring(node.Data)^);
????? ps:=NewStr(precnode(strlst.Objects[i])^.Id);
????? nodetmp:=TreeView.Items.AddChildObject(node,precnode(strLst.Objects[i])^.Name,
??????? ps);
????? Dispose(precnode(strlst.objects[i]));
????? strlst.Delete(i);
????? {原先此處誤寫成node,讓我調試了半天,郁悶}
????? AppendChild(treeview,nodetmp,strlst);
??? end;??
? end;
var
? List: TStringList;
? Node: TTreeNode;
? Index: Integer;
? ps:pstring;//指針
? prec:PRecNode;
? i:Integer;
begin
? TreeView.Items.BeginUpdate;
? try
??? TreeView.Items.Clear;
??? List := TStringList.Create;
??? try
????? List.Sorted := True;
????? {此句非常重要,默認為dupIgnore,如有重復記錄則忽略}
????? list.Duplicates:=dupAccept;
????? {先遍歷一邊query,獲取所有記錄}
????? Query.First;
????? while not Query.Eof do
????? begin
??????? {保存數據}
??????? New(prec); {每刪除一條記錄時,要保證將其保存的數據也一同刪除}
??????? prec^.Id:=Query.fieldbyname(Id).AsString;
??????? prec^.PId:=Query.fieldbyname(pid).asstring;
??????? prec^.Name:=Query.fieldbyname(DisplayName).asstring;
??????? List.AddObject(Query.FieldByName(pid).AsString,TObject(prec));
??????? Query.Next;
????? end;
????? showint(list.count);
????? while List.IndexOf('0')<>-1 do
????? begin
??????? i:=List.IndexOf('0');
??????? ps:=NewStr(Trim(precnode(List.Objects[i])^.Id));
??????? node:=TreeView.Items.AddChildObject(nil,precnode(List.Objects[i])^.Name,
????????? ps);
??????? Dispose(precnode(List.Objects[i]));
??????? List.Delete(i);
??????? AppendChild(TreeView,node,list);
??????? //AppendChild(list,node);
????? end;
??? finally
????? for i:=0 to List.Count-1 do
????? begin
??????? Dispose(precnode(List.objects[i]));
????? end;
????? List.Free;
??? end;
? finally
??? TreeView.Items.EndUpdate;
? end;
end;
總結
以上是生活随笔為你收集整理的一个自己写的有关数据库的treeview.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编译原理——实验叁预习报告——基于YAC
- 下一篇: 作者:温孚江,现任山东农业大学校长、教授