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

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

Можно ли в DBGride на поле look-up выводить не одно поле, а два? [D5, D6, ADO]


arkara ©   (2002-10-21 16:50:00) 

Уважаемые мастера, помогите! Можно ли в DBGride на поле look-up выводить не одно поле, а два? Т.е.: надо в одно поле таблицы1 занести данные из другого поля таблицы2. Но показывать при выборе нужно не только одно то поле, а и еще одно для того чтобы пользователь мог понять , что за цифры он вообще выбирает. Типа: 1 - номер, 2 - цвет. (1|белый). Кто-нибудь! подскажите как этот выпадающий список к DBGridу таблицы1 прицепить!! Без использования всяких сторонних компонент.


Johnmen   (2002-10-21 18:04:00) [1]

Не шуми... :)
Создай вычисляемое поле в НД таблицы2 такое, какое тебе надо, и отображай его в лукапном списке...


Игорь Шевченко   (2002-10-21 17:46:00) [2]


{
Использование дополнительного компонента для InplaceEditor"а в DBGrid.
Для примера используется редактор поля State в таблице Clients из стандартного
алиаса DBDEMOS.

Для колонки State в DBGrid добавлен PickList из нескольких штатов. (CA,MA,NY)
2002, Игорь Шевченко
}
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, Db, DBTables, DBCtrls, StdCtrls;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid: TDBGrid;
Edit: TEdit;
AddressLabel: TLabel;
procedure FormCreate(Sender: TObject);
procedure DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure DBGridColExit(Sender: TObject);
procedure DBGridKeyPress(Sender: TObject; var Key: Char);
private
FEditor : TDBComboBox; { Тот самый ComboBox,
который будет замещать стандартный InplaceEditor
для поля State }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var I : Integer;
begin
{ Создание комбобокса вручную, можно положить на форму в design-time }
FEditor := TDBComboBox.Create(Self);
FEditor.Parent := Self;
FEditor.Visible := false;
FEditor.Style := csDropdownList;
FEditor.DataSource := DBGrid.DataSource;
FEditor.DataField := "STATE";
for I:=0 to Pred(DBGrid.Columns.Count) do
if DBGrid.Columns[I].Field.FieldName = FEditor.DataField then begin
{ Присвоение списка PickList списку строк ComboBox"a }
FEditor.Items.Assign(DBGrid.Columns[I].PickList);
Break;
end;
end;

procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdFocused in State) then
if (Column.Field.FieldName = FEditor.DataField) then begin
{ Вместо стандартного InplaceEditor"а показываем ComboBox }
FEditor.Left := Rect.Left + DBGrid.Left;
FEditor.Top := Rect.Top + DBGrid.top;
FEditor.Width := Rect.Right - Rect.Left + 2;
FEditor.Visible := True;
end;
end;

procedure TForm1.DBGridColExit(Sender: TObject);
begin
{ При выходе с поля ComboBox надо скрыть }
if DBGrid.SelectedField.FieldName = FEditor.DataField then
FEditor.Visible := false;
end;

procedure TForm1.DBGridKeyPress(Sender: TObject; var Key: Char);
begin
{ Передаем все нажатия клавиш в InplaceEditor"е созданному ComboBox"у }
if (Key <> chr(9)) then
if (DBGrid.SelectedField.FieldName = FEditor.DataField) then begin
FEditor.SetFocus;
SendMessage(FEditor.Handle, WM_Char, word(Key), 0);
end;
end;

end.


Вместо ComboBox"а можно работать с любым другим Control"ом


arkara   (2002-10-21 17:29:00) [3]

Народ, я тоже читал хелпы!! Цитировать не нужно... Конкретно кто-нить может сказать???


Johnmen   (2002-10-21 17:25:00) [4]

В свойствах лукапного поля перечисляешь через ; список отображаемых в списке полей !


arkara   (2002-10-21 16:59:00) [5]

Так это я тоже читал. Только это относиться к DBLookupCombo, а мне надо чтобы список выпадал в одном из полей DBGridа!!! или можно как-то прицепить DBLookupComboBox к DBGrid?? Как??


Андрей Прокофьев   (2002-10-21 16:52:00) [6]

ListFieldcan represent more than one field. Multiple field names should be separated by semicolons.


Наверх

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