![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Проблема в организации повторяющегося кода.
Код:
procedure TForm1.dxBarButton1Click(Sender: TObject); var DBNames : TStringList; DBName : string; NewItem : TTreeNode; begin DBNames := TStringList.Create; MyConnection1.GetDatabaseNames(DBNames); cxTreeView1.Items.BeginUpdate; for DBName in DBNames do begin NewItem := cxTreeView1.Items.Add(nil,DBName); NewItem.ImageIndex := 0; NewItem.SelectedIndex := 0; NewItem.HasChildren := True; end; cxTreeView1.Items.EndUpdate; DBNames.Free; end; Получаю список БД с сервера MySQL. Создаю "корень дерева". Далее обрабатываю OnExpanding (при развёртывании ветки), получая полный список таблиц Код:
procedure TForm1.cxTreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); var TblNames : TStringList; TblName : string; NewItem : TTreeNode; begin MyConnection1.Database := Node.Text; MyConnection1.Connect; TblNames := TStringList.Create; MyConnection1.GetTableNames(TblNames); cxTreeView1.Items.BeginUpdate; Node.DeleteChildren; for TblName in TblNames do begin NewItem := cxTreeView1.Items.AddChild(Node,TblName); NewItem.ImageIndex := 1; NewItem.SelectedIndex := 1; end; cxTreeView1.Items.EndUpdate; TblNames.Free; end; Дальше у таблиц будут "колонки"... и вот тут запара. Нужно писать третий раз "по сути" один и тот же код. Как этот процесс ГРАМОТНО организовать? |
#2
|
|||
|
|||
![]() Ну например вынести это в отдельную процедуру
Код:
procedure TForm1.AddChildrens(Node:TTreeNode;ChildrenNames:TStrings;ImageIndex:Integer); var ChildrenName : String; NewItem:TTreeNode; begin cxTreeView1.Items.BeginUpdate; if Node = Nil then cxTreeView1.Items.Clear; else Node.DeleteChildren; for ChildrenName in ChildrenNames do begin NewItem := cxTreeView1.Items.AddChild(Node,ChildrenName ); NewItem.ImageIndex := ImageIndex; NewItem.SelectedIndex := ImageIndex; end; cxTreeView1.Items.EndUpdate; end; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Uniq! (22.03.2013)
|
#3
|
||||
|
||||
![]() Код:
cxGrid1: TcxGrid; procedure dxBarButton1Click(Sender: TObject); procedure cxTreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); procedure cxTreeView1Change(Sender: TObject; Node: TTreeNode); private { Private declarations } public { Public declarations } end; var Form1: TForm1; А здесь это как выглядеть будет? ![]() |
#4
|
|||
|
|||
![]() Ну, что всё разжёвывать ?
Код:
private procedure AddChildrens(Node:TTreeNode; ChildrenNames:TStrings; ImageIndex:Integer); Код:
procedure TForm1.dxBarButton1Click(Sender: TObject); var DBNames : TStringList; begin DBNames := TStringList.Create; MyConnection1.GetDatabaseNames(DBNames); AddChildrens (nil,DBNames,0); DBNames.Free; end; procedure TForm1.cxTreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean); var Names : TStringList; begin Names := TStringList.Create; try if Node.Level = 1 then begin MyConnection1.Database := Node.Text; MyConnection1.Connect; MyConnection1.GetTableNames(TblNames); end else if Node.Level = 2 then begin // тут добавить код получения имён полей // таблицы Node.Text в список Names end else Exit; AddChildrens (Node,Names,Node.Level); finally Names.Free end; end; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Uniq! (22.03.2013)
|
#5
|
||||
|
||||
![]() Цитата:
Нет, что вы. Я разобрался. Просто секции для меня пока остаются загадкой. Никак руки не доходят изучить. Благодарю. Очень помогли. ![]() |