Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

загрузка из базы в 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;


выдрал из ..., но принцип думаю должен быть понятен


Наверх

Титульная страница Поиск, карта сайта Написать письмо