FAQ VCL
Компоненты\DevExpress\cxGrid

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как встроить редактор в ячейку cxGrid?

uses
  cxGrid;

// Положить на форму компонент cxEditRepository и создать в нём
// необходимые редакторы, например:
// TcxEditRepositoryComboBoxItem
// TcxEditRepositoryLabel

type
  TForm1 = class(TForm)
    cxEditRepository1: TcxEditRepository;
    cxEditRepository1ComboBoxItem1: TcxEditRepositoryComboBoxItem;
    cxEditRepository1Label1: TcxEditRepositoryLabel;

    procedure FormCreate(Sender: TObject);
  private
  public
  end;

// Подключенный источник данных должен поддерживать редактирование

procedure TForm1.FormCreate(Sender: TObject);
begin
  //  fdQuery1.Open;
  //  kbmMemTable1.Open;

  cxEditRepository1ComboBoxItem1.Properties.Items.AddStrings(
    ['str1', 'str2', 'str3', 'str4', 'str5', 'str6']
  );

  // И в самом cxGrid должна быть включена возможность редактирования
  cxGrid1DBTableView1.OptionsData.Editing := True;
end;

// Определить событие Properties у нужного столбца

procedure TForm1.cxGrid1DBTableView1FIELD_NAMEGetProperties(
  Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
  var AProperties: TcxCustomEditProperties);
begin
  if ARecord.Values[cxGrid1DBTableView1FIELD_NAME.Index] <> null then
    AProperties := cxEditRepository1ComboBoxItem1.Properties
  else
    AProperties := cxEditRepository1Label1.Properties;

  // Ветка else опциональна, можно её не реализовывать
end;

// Если изменения нужно сразу сохранять в базу данных, это можно
// сделать например так, определив события созданного редактора:

procedure TForm1.cxEditRepository1ComboBoxItem1PropertiesInitPopup(
  Sender: TObject);
begin
  FDQuery1.Edit;
end;

procedure TForm1.cxEditRepository1ComboBoxItem1PropertiesChange(
  Sender: TObject);
begin
  FDQuery1.Post;
  FDConnection1.Commit;
end;

При использовании материала - ссылка на сайт обязательна