Страница 1 из 1

Поле DBLookup в DBGrid

СообщениеДобавлено: 21.01.2013 18:13:47
Ism
Привет
Решил одну задачку, думаю другим не помешает
Иногда надо , чтоб в DBGrid ячейках были многофункциональные компоненты типа DBLookupCombobox и подобное
Чтоб не заморачиваться есть функция которая выставляет компонент поверх нужной ячейки DBGrid

Цепляем эту функцию на событие OnPrepareCanvas DBGrid

Код: Выделить всё
procedure set_DBLookupComboBox_cell_pos(column_name:string; object_:TDBLookupComboBox;db_grid:TDBGrid);
var
  rect_:TRect;
  i:integer;
  found_field_flag:boolean;
begin
  // Для установки положения данного поля в ячейке DBGrid
  // Вешать на OnPrepareCanvas
  // set_DBLookupComboBox_cell_pos('vozvratnost',DBLookupComboBoxVosvratnost,TDBGrid(sender))
  if object_.DataSource.DataSet.Active then
    if object_.DataSource.DataSet.RecordCount>0 then object_.Visible:=true else object_.Visible:=false
  else
    begin object_.Visible:=false; Exit; end;
  found_field_flag:=false;
  for i:=0 to db_grid.Columns.Count-1 do if db_grid.Columns.Items[i].FieldName=column_name then begin found_field_flag:=true; break;  end;
  if found_field_flag=false then begin ShowMessage(SysToUTF8('Поле в DBGrid не найдено')); exit; end;
  if dgIndicator in db_grid.Options then inc(i); //dgIndicator тоже считается за колонку

  rect_:=db_grid.SelectedFieldRect;
  rect_.Left:=db_grid.CellRect(i,0).Left;
  rect_.Right:=db_grid.CellRect(i,0).Right;

  object_.Left:=db_grid.Left+rect_.Left+1;
  object_.Top:=db_grid.Top+rect_.Top+2;
  object_.Width:=rect_.Right-rect_.Left;
  object_.Height:=rect_.Bottom-rect_.Top;
end;


dbgrid.png
dbgrid.png (7.61 КБ) Просмотров: 15298

Re: Поле DBLookup в DBGrid

СообщениеДобавлено: 22.01.2013 06:32:37
xcod
не понял
а лукап поля не тоже самое ли делают7

Re: Поле DBLookup в DBGrid

СообщениеДобавлено: 22.01.2013 15:29:51
Ism
То, что умеет DBGrid урезано и мне завести это не удалось
А lookup в Dataset не особенно нужен , если есть View в базе данных