Как встроить редактор в ячейку 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;
|