Текущий архив: 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