![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
загрузка из базы в Treeview
linuxoid © (2010-07-07 15:47:00)Здравстауйте! у мя вопрос такой.
имеется таблица node
nodeid|parentid|nodename
пытаюсь загрузить из него данные в Treeview. загружается токо узлы и подузлы, а вот подподузлы не загружаются в чем проблема может быть.
procedure Tmainform.updateClick(Sender: TObject);
var i:integer;
child:ttreenode;
begin
subjecttree.Items.BeginUpdate;
if subjecttree.Items.Count >0 then
begin
subjecttree.Items.Clear
end;
basequery.Active:=false;
basequery.SQL.Clear;
basequery.SQL.Text:='select *'+
'from node where parentid=:parentid';
basequery.Parameters.ParseSQL(basequery.SQL.Text,true);
basequery.Parameters.ParamByName('parentid').Value:=0;
try
baseconnect.Open;
basequery.Active:=true;
if basequery.RecordCount<>0 then
begin
while not basequery.Eof do
begin
subjecttree.Items.AddObject(nil, basequery.Fields[2].asstring,
pointer(basequery.Fields[0].asinteger));
basequery.Next;
end;
child:=subjecttree.Items.GetFirstNode;
while child<>nil do
begin
FillBranch(Child);
Child := Child.GetNextSibling;
end;//while
end; //if
finally
BaseConnect.Close; //Закрываем коннект
end;
SubjectTree.Items.EndUpdate; //Разрешить прорисовку
{FillTree}
end;
procedure TMainForm.FillBranch(tn: TTreeNode);
var
i: Integer;
TreeNode : TTreeNode;
begin
BaseQuery.Active := false;
BaseQuery.SQL.Clear;
//Составление запроса и ввод параметров
//Выбираем элементы не имеющие родителя, т.е. корневые
BaseQuery.SQL.Text := 'SELECT NodeID, ParentID, NodeName, NodeType '+
'FROM node WHERE ParentID = :ParentID';
BaseQuery.Parameters.ParseSQL(BaseQuery.SQL.Text, true);
BaseQuery.Parameters.ParamByName('ParentID').Value := Integer(tn.Data);
BaseQuery.Active := true;
if BaseQuery.RecordCount <> 0 then
begin
while not BaseQuery.Eof do
begin
TreeNode := SubjectTree.Items.AddChildObject(tn,
BaseQuery.Fields[2].AsString,
Pointer(BaseQuery.Fields[0].AsInteger));
BaseQuery.Next;
end; //while
Child := tn.getFirstChild;
while Child <> nil do
begin
FillBranch(Child);
Child := Child.GetNextSibling;
end;//while
end; //if
end; {FillBranch}
заранее благодарю.
или имеется ли альтернативный код?
Dennis I. Komarov (2010-07-07 16:22:00) [1]Все побежали смотреть, кто чего там наделал... Ты в коде то разберись, чай всего строк 20
linuxoid (2010-07-07 16:20:00) [2]вот есть ссылка, которая должна подойти, но она че то не работает
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=488
ошибка выходит:
Dennis I. Komarov (2010-07-07 15:57:00) [3]
procedure AddSubMenuItems(UpItem: Integer; Parent: TMenuItem);
var
MI: TMenuItem;
begin
with TAdoDataSet.Create(Self) do try
ConnectionString:=AConnectionString;
CommandText:='EXEC sp_GetPartOfMenu ' + IntToStr(UnitID) + ', ' + IntToStr(UpItem);
Active:=true;
First;
while not Eof do begin
MI:=TMenuItem.Create(Self);
MI.Caption:=FieldByName('f_MenuItemCaption').AsString;
MI.Tag:=FieldByName('f_MenuItemID').AsInteger;
if Parent <> nil then Parent.Add(MI)
else MainMenu.Items.Add(MI);
if FieldByName('f_MenuItemAction').Value <> Null then
MI.OnClick:=MenuItemClick;
AddSubMenuItems(FieldByName('f_MenuItemID').AsInteger, MI);
Next;
end;
finally
Active:=False;
Free;
end;
end;
begin
// Загружаем меню
AddSubMenuItems(0, nil);
end;
выдрал из ..., но принцип думаю должен быть понятен