数据库表TreeView树的快速生成
2012-02-21 11:28
253 查看
根据数据表的内容生成TreeView树状结构,通常的做法就是从顶级开始,然后逐项递归查询遍历生成。这种方法在实现上容易做到,也很容易想到,但是效 率比较低,因为数据库的检索(SQL语句需要解释执行,而且是对数据库文件进行操作)还是比较耗时的,尤其是树的层次较多,节点较多的情况。这里我要介绍 的方法是以空间换取时间,只进行一次数据库检索,提取出全部数据,然后一次生成TreeView树状结构。通过SQL语句,让返回的记录按照父节点ID、 节点ID进行排序,这样保证每次当前要添加的节点记录的父节点都已经添加到了TreeView树中,剩下的工作就是如何在TreeView树中找到父节 点。这里我采用了一个排序的TStringList列表,通过排序列表采用二分查找的快速性能,就能够很快地查找到当前要添加节点的父节点,从而插入到TreeView树的正确位置。
源代码如下(假定数据表名称为FTree,字段有ID, ParentID, Name):
源代码如下(假定数据表名称为FTree,字段有ID, ParentID, Name):
procedure MakeTree(Query: TQuery; TreeView: TTreeView); var List: TStringList; Node: TTreeNode; Index: Integer; begin TreeView.Items.BeginUpdate; try TreeView.Items.Clear; List := TStringList.Create; try List.Sorted := True; while not Query.Eof do begin if Query.FieldByName('ParentID').AsInteger = 0 then { ParentID=0,顶层节点 } Node := TreeView.Items.AddChild(nil, Query.FieldByName('Name').AsString) else begin Index := List.IndexOf(Query.FieldByName('ParentID').AsString); Node := TreeView.Items.AddChild(TTreeNode(List.Objects[Index]), Query.FieldByName('Name').AsString); end; List.AddObject(Query.FieldByName('ID').AsString, Node); Query.Next; end; finally List.Free; end; finally TreeView.Items.EndUpdate; end; end; procedure TForm1.Button1Click(Sender: TObject); var T: DWORD; begin T := GetTickCount; Query1.SQL.Text := 'SELECT * FROM FTree ORDER BY ParentID, ID'; Query1.Open; MakeTree(Query1, TreeView1); Label1.Caption := Format('MakeTree所用时间: %d ms', [GetTickCount - T]); end;
相关文章推荐
- 数据库表TreeView树的快速生成
- 数据库表TreeView树的快速生成
- 数据库表TreeView树的快速生成
- 数据库表TreeView树的快速生成
- 用UDL快速生成一个数据库连接字符串。
- ASP.NET TreeView根据数据库动态生成
- RaceWeb介绍(6):由500强公司数据快速生成百度地图——公司数据导入。(web、数据库都在本地)
- idea 根据数据库表快速生成Spring Data JPA实体类
- Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
- 使用SchemaSpy逆向工程生成数据库依赖关系使用SchemaSpy工具可以快速的从数据库中得到
- RaceWeb介绍(6):由500强公司数据快速生成百度地图——公司数据导入。(web、数据库都在本地)
- idea 根据数据库表快速生成Spring Data JPA实体类
- 根据数据库结构生成TreeView
- idea 从数据库快速生成Spring Data JPA实体类
- Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
- idea 根据数据库表快速生成Spring Data JPA实体类
- Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
- [C#]读取数据库,动态生成TreeView[递归]
- 编写Powerdesigner脚本,快速生成数据库表
- 快速生成数据库字典