Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.10.2007, 10:03
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию Помогите с выборкой ...

Ребята, подскажите плиз-з-з-з
Имеется 2 TDBLookUpComboBox.
В одном из них содержится список отделов, а в другом - список сотрудников этих отделов.

??? Можло ли реализовать прогу так, чтобы при выборе определённого отдела - во втором LookUpComboBox оставались только сотрудники ИМЕННО ЭТОГО отдела. А остальные скрывалить ??? И как это сделать?
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #2  
Старый 09.10.2007, 10:25
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Попробуй хранить имена сотрудников в TStringList, а его первый элемент - название отдела. В событие OnChange ищи этот StringList по его первому элементу и остальные уже загружай в ComboBox.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #3  
Старый 09.10.2007, 10:39
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

А если понадобится изменить список - придётся перекомпилить прогу !!!

Мне говорили - можно как-то с помощю индексирования. Но как ???
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #4  
Старый 09.10.2007, 10:44
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

В TStringList есть такие методы, как Add, Insert, Delete, и тому подобные.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #5  
Старый 09.10.2007, 11:11
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Насколько я помню (т.к. сам я этим компонентом не пользуюсь) TDBLookUpComboBox настраивается на конкретное поле датасета. Первый у тебя настроен на поле содержащее имена (наименования) отделов. Значит после выбора отдела, формируй запрос к таблице сотрудников с условием отфильтровки только тех кто в данном (выбранном) отделе работает и на поле с фамилией сформированного датасета настраивай второй TDBLookUpComboBox.
Ответить с цитированием
  #6  
Старый 09.10.2007, 11:21
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Я с этим компонентом не работал. Поэтому я и предложил такой вариант. Если он подходит, то вот код:
Код:
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.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.

Последний раз редактировалось The Shadow, 09.10.2007 в 11:24.
Ответить с цитированием
  #7  
Старый 09.10.2007, 12:24
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

ОК.
Попробую.
Но это не то, что мне бы хотелось сделать !
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #8  
Старый 09.10.2007, 13:03
Аватар для The Shadow
The Shadow The Shadow вне форума
Продвинутый
 
Регистрация: 11.06.2007
Адрес: Уфа, Россия
Сообщения: 793
Репутация: 35
По умолчанию

Я понял. Только, как я уже и говорил, с TDBLookUpComboBox'ами я не работал.
__________________
Что делать, когда сломался комп:
1. Если вы юзер - делать ноги.
2. Если ремонтник - делать деньги.
3. Если вы программист - делать вид, что так было задумано.
Ответить с цитированием
  #9  
Старый 09.10.2007, 18:59
Аватар для mav_c
mav_c mav_c вне форума
Активный
 
Регистрация: 26.03.2007
Адрес: Москва
Сообщения: 287
Репутация: 30
По умолчанию

Цитата:
Сообщение от Yurk@
ОК.
Попробую.
Но это не то, что мне бы хотелось сделать !
Сделай так:
Обрабатывай событие AfterScrool 1-го датасэта и по нему делай выборку во втором.

Код:
DataSet1.SQL.Text := 'SELECT * FROM departments';
DataSet2.SQL.Text := 'SELECT * FROM employes WHERE department = :department';
...
procedure DataSet1AfterScrool(DataSet : TDataSet);
begin
 DataSet2.ParamByName('department').AsInteger := 
  DataSet2.FieldByName('id').AsInteger;
end;
Возможно не самый лаконичный вариант. Зато с любыми компонентами и НД.
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
Ответить с цитированием
  #10  
Старый 18.10.2007, 13:37
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

ОЧЕНЬ даже неплохой вариант!
Обязательно попробую ...
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #11  
Старый 18.10.2007, 13:38
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

ОЧЕНЬ даже неплохой вариант!
Обязательно попробую ...
Спасибо !!!
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #12  
Старый 24.10.2007, 12:27
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
Лампочка Подскажите

Имеется DBGrid и Форма которая эту же DBGrid заполняет (редактирование DBGrid запрещено) на разных формах.
Можно ли взять с DBGrid данные одного какого-то поля и передать на редактирование в заполняющую Форму.
И как это сделать ??????
Помогите плиз!
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #13  
Старый 24.10.2007, 13:25
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Код:
Form2.Edit1.Text:=Form1.DBGrid1.DataSource.DataSet.FieldByName('SomeName').AsString;
Ответить с цитированием
  #14  
Старый 25.10.2007, 16:48
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
Восклицание

Цитата:
Сообщение от Aristarh Dark
Код:
Form2.Edit1.Text:=Form1.DBGrid1.DataSource.DataSet.FieldByName('SomeName').AsString;

Немножко не то!
Ти передаёшь только одно значение в поле Edit, а у меня этих полей около 15. И мне нужно чтобы они мне открылись по одному полю.

Пример: Есть список анкет сотрудников (DBGrid) - мне нужно выбрать одного сотрудника и по нажатии кнопки РЕДАКТИРОВАТЬ данная анкета должна открыться в другой форме для редактирования (но не в DBGrid).
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #15  
Старый 25.10.2007, 17:20
Аватар для mav_c
mav_c mav_c вне форума
Активный
 
Регистрация: 26.03.2007
Адрес: Москва
Сообщения: 287
Репутация: 30
По умолчанию

Цитата:
Сообщение от Yurk@
Немножко не то!
Ти передаёшь только одно значение в поле Edit, а у меня этих полей около 15. И мне нужно чтобы они мне открылись по одному полю.

Пример: Есть список анкет сотрудников (DBGrid) - мне нужно выбрать одного сотрудника и по нажатии кнопки РЕДАКТИРОВАТЬ данная анкета должна открыться в другой форме для редактирования (но не в DBGrid).

Ну ты на второй форми располагай DBEdit'ы и превежи их к нужным полям. Вот, только не забудь в uses форму на кторой распалагается источник данных
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:07.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter