zoukankan      html  css  js  c++  java
  • 根据数据库结构生成TreeView

    现在大多数的方法是采用递归,但这种操作会频繁的去select数据库,降低了执行效率,稍微改动一些,效果会好不少,这里介绍一种方法,即一次性select出所有数据,然后按照ParentID排序,逐条添加到TreeView,添加前,先遍历TreeView,查找他的上一级节点,遍历Treeview可比select数据快啊,下面看代码:

    数据表结构,最顶级parentid值我用的是-1,大家也可以用其他值,但要保证最顶级parentid值最小,层次越深,parentid越大

    procedure TUIOperate.FillTree(treeview: TTreeView);
    var
    findq: TADOQuery;
    node: TTreeNode;

    //这个方法是根据记录的id字段值,查找TreeView上的父节点
    function FindParentNode(id:Integer):TTreeNode;
    var
    i:Integer;
    begin
    Result := nil;
    for i := 0 to treeview.Items.Count - 1 do
    begin
    //比较Node的Data值和记录的id值
    if Integer(treeview.Items[i].Data) = id then
    begin
    Result := treeview.Items[i];
    Break;
    end;
    end;
    end;

    begin
    findq := TADOQuery.Create(nil);
    findq.Connection := controler.DataConnect.Connection; //这里的Connection指向你的数据连接
    try
    treeview.Items.BeginUpdate;
    treeview.Items.Clear;
    //选出所有记录,并按parentid排序,这样可以保证先添加顶级节点,在下级记录添加时,总能找到父节点
    findq.SQL.Text := 'SELECT * FROM [Catalog] order by parentid,id';
    findq.Open;
    while not findq.Eof do
    begin
    //如果是最顶级,直接添加到Treeview
    if findq.FieldByName('parentid').AsInteger = -1 then
    //将id值,保存在Node的Data中,以便查找用
    treeview.Items.AddObject(nil,findq.FieldByName('CatalogName').AsString,Pointer(findq.FieldByName('id').AsInteger))
    else
    begin
    //查找上级节点
    node := FindParentNode(findq.FieldByName('parentid').AsInteger);
    if node <> nil then
    treeview.Items.AddChildObject(node,findq.FieldByName('CatalogName').AsString,Pointer(findq.FieldByName('id').AsInteger));
    end;
    findq.Next;
    end;
    finally
    findq.Free;
    treeview.Items.EndUpdate;
    end;
    end;

  • 相关阅读:
    python学习day15 内置函数
    python学习day14 生成器表达式
    python学习day13 迭代器,生成器
    python学习day12 装饰器进阶
    gulp管理angular2项目 配置文件
    angular2 基于webpack环境搭建
    jQuery dataTable 操作个人使用总结
    报错:Could not reserve enough space for object heap error
    CSS布局之圣杯布局和双飞翼布局
    CSS 之 Position定位
  • 原文地址:https://www.cnblogs.com/Little-Star/p/7542801.html
Copyright © 2011-2022 走看看