Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.13;
Скачать: CL | DM;

Вниз

К вопросу о визуальном представлении древовидной структуры данных   Найти похожие ветки 

 
KIR ©   (2003-01-28 20:39) [0]

Народ, как хранить ссабж ворде ясно:
поля
ID,
ParentID,
MyData

У первого уровня ParentID = null.

Но вот беда: в свое время ятак и не успел нормально освоить рекурсию, а вот теперь столкнулся с тем, что древовидную структуру данных надо отобразить с помощью TreeView. Ясно, что необходима рекурсия, а вот как сделать не соображу, хэлпп плз...


 
jack128 ©   (2003-01-28 21:06) [1]

Не обязательно рекурсией
можно заполнять дерево динамически
на ibase.ru есть статья на эту тему
если хочешь могу выслать

а на счет рекурсии примерно так если разберешся ;)
(id=primary key; name = название улицы, области;
parentid = ссылка на родителя; id хранится в TTreeNode.Data)

procedure TdmMain.LoadAddressToTreeView(TreeView : TTreeView);
var Transaction : TIBTransaction;
ParentId : integer;
procedure LoadChildrenToAddressNode(ParentNode : TTreeNode);
var t : TIBTransaction;
ParentId : string;
q : TIBQuery;
Node : TTreeNode;
begin
if ParentNode = nil then
ParentId := "is null"
else
ParentId := "= " + IntToStr(Integer(ParentNode.Data));
q := TIBQuery.Create(nil);
q.SQL.Text := "select id, name from addresses where parentid "+ParentID;
q.Transaction := Transaction;
try
if not Transaction.InTransaction then Transaction.StartTransaction;
q.Open;
q.First;
while not q.Eof do begin
Node := TreeView.Items.AddChildObject(ParentNode,
q.FieldByName("name").AsString,
Pointer(q.FieldByName("id").AsInteger));
LoadChildrenToAddressNode(Node);
q.Next;
end;
q.Close;
finally
Q.Free;
end;
end; // LoadChildrenToAddressNode
begin
TreeView.Items.Clear;
Transaction := TIBTransaction.Create(nil);
try
Transaction.DefaultDatabase := dbBase;
Transaction.Params.Text := SReadTransactionParams;
Transaction.StartTransaction;
try
LoadChildrenToAddressNode(nil);
Transaction.Commit;
except
Transaction.Rollback;
end;
finally
Transaction.Free;
end;
end; // LoadAddressToTreeView


 
KIR ©   (2003-01-29 00:54) [2]

Вроде разобрался с рекурсией. Все работает.
Если я правильно понял, то вся "фишка" рекурсии в данном случае заключается в том, что каждый раз создается новый Query
(
q := TIBQuery.Create(nil);
q.SQL.Text := "select id, name from addresses where parentid "+ParentID;
q.Transaction := Transaction;

)
Верно?


 
Александр Спелицин ©   (2003-01-29 11:39) [3]

Если нужно просто отобразить древовидную стуктуру в виде обычного дерева, то никакой рекурсии не надо.
На "Королевстве Delphi" в разделе "Hello, World" есть статья DBTreeView своими руками.



Страницы: 1 вся ветка

Текущий архив: 2003.02.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
9-38005
Извращенец
2002-07-09 17:36
2003.02.13
Спрайтовая карта


3-38113
Behemoth
2003-01-28 11:45
2003.02.13
Как получить список всех псевдонимов (Aliase) на моей машине?


1-38327
sagchat
2003-01-31 13:41
2003.02.13
Как при развертывании формы во весь экран, разместить memo


14-38446
Сатир
2003-01-29 12:51
2003.02.13
Семейный фотоальбом (не мой;)


4-38649
nikulin
2003-01-04 16:31
2003.02.13
Можно ли перевести значение переменной численного типа в строку с