![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|
||||
|
||||
|
Цитата:
Нет, что вы. Я разобрался. Просто секции для меня пока остаются загадкой. Никак руки не доходят изучить. Благодарю. Очень помогли. ![]() |