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;

  • 相关阅读:
    Palindrome Linked List 解答
    Word Break II 解答
    Array vs Linked List
    Reverse Linked List II 解答
    Calculate Number Of Islands And Lakes 解答
    Sqrt(x) 解答
    Find Median from Data Stream 解答
    Majority Element II 解答
    Binary Search Tree DFS Template
    188. Best Time to Buy and Sell Stock IV
  • 原文地址:https://www.cnblogs.com/Little-Star/p/7542801.html
Copyright © 2011-2022 走看看