0

我想使用实时绑定将自定义 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并绑定 FMyObjectList 使用OnCreateAdapeter

有人可以指出我如何做这样的事情的正确方向吗?谢谢

编辑/回答:

Nullable 类型的最佳选择是 Spring4D,但无法使用 Live 绑定直接绑定这些值。

4

1 回答 1

4

Nullable<string>以下是在 LiveBindings 引擎中为to注册类型转换的方法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;
于 2014-12-30T13:20:25.113 回答