Тема: treeView
Показать сообщение отдельно
  #3  
Старый 26.03.2010, 16:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,034
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, для начала, неплохо было бы почитать о том, как проектировать БД. Т.е. твою одну таблицу надо привести к 3й НФ. Т.е. это должно быть 5 таблиц.

А выводить просто - тебе надо написать процку, которая будет находить нужный родительский узел, а потом просто добалять в него потомков. Для внутренней идентификации можно попробовать использовать свойство Data для указания типа узла (предприятие, отдел и т.д.).

Если по простому, то где-то так:
Код:
function TForm1.FindTypedNode(AType : Integer; ACaption : String) : TTreeNode;
var
  I : Integer;
begin
  Result := Nil;
  For I := 0 To TreeView1.Items.Count-1 Do
    If (Integer(TreeView1.Items[i].Data) =  AType) And 
       (ACaption = TreeView1.Items[i].Caption) Then
      Begin
        Result := TreeView1.Items[i];
        Break;
      End;
end;

function TForm1.CreateTypedNode(AParent : TTreeNode; AType : Integer; ACaption  :String) : TTreeNode;
begin
  Result := TreeView1.Items.AddChild(AParent,ACaption);
  Result.Data := Pointer(AType);
end;

procedure TForm1.AddNode(APredpr, ACeh, AOtdel, AFIO);
var
  APNode : TTreeNode;
  ACNode : TTreeNode;
  AONode : TTreeNode;
  AFNode : TTreeNode;
begin
  APNode := FindTypedNode(1,APredpr);
  If APNode = Nil Then APNode := CreateTypedNode(Nil,1,APredpr);

  ACNode := FindTypedNode(2,ACeh);
  If ACNode = Nil Then ACNode := CreateTypedNode(APNode,2,ACeh);

  AONode := FindTypedNode(3,AOtdel);
  If AONode = Nil Then AONode := CreateTypedNode(ACNode,3,AOtdel);

  AFNode := FindTypedNode(4,AFIO);
  If AFNode = Nil Then AFNode := CreateTypedNode(AONode,4,AFIO);
end;

Код довольно "грязный" и не оптимальный, но идея должна быть понятна.
Ответить с цитированием