Я делал набор параметров для отчета - произвольного типа, с возможностью выбора значения из справочника. DevExpress грид, редактор колонки "значение" меняется перед редактированием. Что-то вроде:
FieldEditorClasses: array [ftUnknown..ftGraphic] of TcxCustomEditClass = (
TcxTextEdit, // ftUnknown
TcxTextEdit, // ftString
TcxSpinEdit, // ftSmallint
TcxSpinEdit, // ftInteger
TcxSpinEdit, // ftWord
TcxCheckBox, // ftBoolean
TcxCalcEdit, // ftFloat
TcxCurrencyEdit, // ftCurrency
TcxCalcEdit, // ftBCD
TcxDateEdit, // ftDate
TcxTimeEdit, // ftTime
TcxDateEdit, // ftDateTime ?!
nil, // ftBytes
nil, // ftVarBytes
nil, // ftAutoInc
TcxBlobEdit, // ftBlob
TcxMemo, // ftMemo
TcxBlobEdit // ftGraphic
);
function GetFieldTypeEditor(AFieldType: TFieldType): TcxCustomEditClass;
begin
if AFieldType in AllowedFieldTypes then
Result := FieldEditorClasses[AFieldType]
else
Result := nil;
end;
...
// Grid.OnEditing event handler code
EditorClass := GetFieldTypeEditor(Param.DataType);
if Assigned(EditorClass) then
begin
FGridView.Columns[1].PropertiesClass := EditorClass.GetPropertiesClass;
TEditPropertiesCrack(FGridView.Columns[1].Properties).ImmediatePost := true;
end
else
FGridView.Columns[1].PropertiesClass := nil;
Какой должен быть ValueTypeClass у этой колонки, не разбирался. У меня стоит TcxStringValueType, это криво, но работает.