我想使用实时绑定将自定义delphi对象的TObjectList绑定到网格。我希望Nullable支持对象属性,这样如果它们没有值,它们在网格中显示为空白,编辑类似于数据集如何使用可空的db列。
我是否认为Delphi语言不支持可空类型?
TMyObject = class
private
FQuanitity: Nullable<Integer>;
FDescription: Nullable<string>;
public
property Quantity: Nullable<Integer> read FQuanitity write FQuanitity;
property Description: Nullable<string> read FDescription write FDescription;
end;
FMyObectList: TObjectList<TMyObject>;
我会创建一个TPrototypeBindSource
并使用OnCreateAdapeter
有人能指出我如何做这样的事情的正确方向吗?感谢
编辑/答案:
Nullable类型的最佳选择是Spring4D,但是没有办法使用Live绑定直接绑定这些值。
答案 0 :(得分:4)
以下是在LiveBindings引擎中注册Nullable<string>
到string
的类型转换的方式,反之亦然:
procedure RegisterNullableConversions;
begin
TValueRefConverterFactory.UnRegisterConversion(TypeInfo(Nullable<string>), TypeInfo(string));
TValueRefConverterFactory.RegisterConversion(TypeInfo(Nullable<string>), TypeInfo(string),
TConverterDescription.Create(
procedure(const I: TValue; var O: TValue)
begin
if I.AsType<Nullable<string>>.HasValue then
O := I.AsType<Nullable<string>>.Value
else
O := 'null';
end,
'NullableToString', 'NullableToString', EmptyStr, True, EmptyStr, nil)
);
TValueRefConverterFactory.UnRegisterConversion(TypeInfo(string), TypeInfo(Nullable<string>));
TValueRefConverterFactory.RegisterConversion(TypeInfo(string), TypeInfo(Nullable<string>),
TConverterDescription.Create(
procedure(const I: TValue; var O: TValue)
begin
O := TValue.From<Nullable<string>>(I.AsString);
end,
'StringToNullable', 'StringToNullable', EmptyStr, True, EmptyStr, nil)
);
end;