![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Ребята, подскажите плиз-з-з-з
Имеется 2 TDBLookUpComboBox. В одном из них содержится список отделов, а в другом - список сотрудников этих отделов. ??? Можло ли реализовать прогу так, чтобы при выборе определённого отдела - во втором LookUpComboBox оставались только сотрудники ИМЕННО ЭТОГО отдела. А остальные скрывалить ??? И как это сделать? |
|
#2
|
||||
|
||||
|
Попробуй хранить имена сотрудников в TStringList, а его первый элемент - название отдела. В событие OnChange ищи этот StringList по его первому элементу и остальные уже загружай в ComboBox.
|
|
#3
|
||||
|
||||
|
А если понадобится изменить список - придётся перекомпилить прогу !!!
Мне говорили - можно как-то с помощю индексирования. Но как ??? |
|
#4
|
||||
|
||||
|
В TStringList есть такие методы, как Add, Insert, Delete, и тому подобные.
|
|
#5
|
||||
|
||||
|
Насколько я помню (т.к. сам я этим компонентом не пользуюсь) TDBLookUpComboBox настраивается на конкретное поле датасета. Первый у тебя настроен на поле содержащее имена (наименования) отделов. Значит после выбора отдела, формируй запрос к таблице сотрудников с условием отфильтровки только тех кто в данном (выбранном) отделе работает и на поле с фамилией сформированного датасета настраивай второй TDBLookUpComboBox.
|
|
#6
|
||||
|
||||
|
Я с этим компонентом не работал. Поэтому я и предложил такой вариант. Если он подходит, то вот код:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
public
end;
var
Form1: TForm1;
All: array of TStringList;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
SetLength(All, 3);
All[0]:=TStringList.Create;
All[0].Add('I отдел');
All[0].Add('I сотрудник I отдела');
All[0].Add('II сотрудник I отдела');
All[1]:=TStringList.Create;
All[1].Add('II отдел');
All[1].Add('II сотрудник II отдела');
All[2]:=TStringList.Create;
All[2].Add('III отдел');
All[2].Add('I сотрудник III отдела');
All[2].Add('II сотрудник III отдела');
All[2].Add('III сотрудник III отдела');
for i:=0 to Length(All) - 1 do
ListBox1.Items.Add(All[i].Strings[0]);
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
i: Integer;
begin
if ListBox1.ItemIndex = -1 then Exit;
ListBox2.Items.Clear;
for i:=1 to All[ListBox1.ItemIndex].Count - 1 do
ListBox2.Items.Add(All[ListBox1.ItemIndex].Strings[i])
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
i: Integer;
begin
for i:=0 to Length(All) - 1 do
All[i].Destroy;
All:=nil;
end;
end.Последний раз редактировалось The Shadow, 09.10.2007 в 11:24. |