22:02
Создание дерева TTreeView из базы
На примере проделанной мной работы я хочу рассказать, как работать с деревом TTreeView.
Имеется база данных, в которой есть таблица с продукцией или услугами. В таблице 3 поля:
  • КодУслуги
  • Наименование
  • Родитель
При помощи компонента TTreeView необходимо создать дерево.
Для начала напишем процедуру AddNode, которая у нас будет добавлять ветки в дерево.

private
    { Private declarations }
    procedure AddNode(ToTree:TTreeNode;ToId:cardinal);
    procedure DeleteNode(Node:TTreeNode);
  public
    { Public declarations }
  end;
    TNode=record
    id:cardinal;
    str:string[255];
    parent_id:cardinal;
  end;

var
  derevo: Tderevo;
  Nodes:array of TNode;
  NodesCount:cardinal;
  asas:TTreeNode;
  cltrue:boolean;
  cl:boolean;

implementation

uses
Unit2;

{$R *.dfm}

procedure Tderevo.AddNode(ToTree:TTreeNode;ToId:cardinal);
var i:cardinal;
    node:TTreeNode;
begin
 
// Проверяем каждую запись в базе
  for i:=1 to NodesCount do
  begin
    // Если родитель равен коду записи, то мы добавляем ее в дерево к этому родителю
      if nodes[i].parent_id=ToId then
    begin
     
// Добавляем запись в дерево
      node:=TreeView1.Items.AddChildObject(ToTree,nodes[i].str,Pointer(nodes[i].id));
     
// Запускаем рекурсивно процедуру добавления с параметрами
      // ToTree=node - только что созданный объект дерева, тоесть к нему бем искать предков
      // ToId=nodes[i].id - будем искать объекты, у которых родитель текущий объект

      AddNode(node,nodes[i].id);
    end;
  end;
end;


Для этого на событие OnCreate пишем следующий код:

procedure TForm1.FormCreate(Sender: TObject);
var i:cardinal;
begin
  TreeView1.Items.Clear;
 
// Вначале считаем количество записей
    NodesCount:=Datamodule2.Yslygi_12.RecordCount;
 
// Задаем размер динамического массива для базы
  setlength(Nodes,NodesCount+1);
 
// Загружаем базу в память
  Datamodule2.Yslygi_12.First;
  for i:=1 to NodesCount do
  begin
   
//Заносим в дерево код услуги, наименование и ссылку на родителя
    Nodes[i].id:=Datamodule2.Yslygi_12.FieldValues['id'];
    Nodes[i].str:=Datamodule2.Yslygi_12.FieldValues['name'];
    try
    Nodes[i].parent_id:=Datamodule2.Yslygi_12.FieldValues['parent'];
    except
    end;
    Datamodule2.Yslygi_12.Next;
  end;
 
// Теперь строим дерево
  // Запускаем рекурсивную процедуру с параметром типа:
  // Добавляем в корень (nil) все значения, у которых родитель = 0

  AddNode(nil,0);
  treeview1.Items.CustomSort(nil,0,true);
end;

Ну вот и все, дерево построено.

Категория: Позновательно | Просмотров: 3722 | Добавил: marisoft | Рейтинг: 5.0/6
Всего комментариев: 0