カスタムTClientDatasetを作成し、これを設計時コンポーネントとして登録しました。 Createメソッドで カスタムTClientDataSetを登録していますが、コンストラクタで作成されたフィールドが表示されません
TMyDataset = class(TClientDataset)
public
constructor Create(AOwner : TComponent); override;
end;
は、私は、このデータセットのフィールドを作成し
implementation
constructor TMyDataset.Create(aOwner : TComponent);
var
lField : TStringField;
begin
inherited Create(aOwner);
lField := TStringField.Create(Self);
lField.FieldName := 'NAME';
lField.Dataset := Self;
Fields.Add(lField);
end;
な
procedure Register;
begin
RegisterComponents('Queries', [TMyDataset]);
end;
などのコンポーネントを登録し、フォームにTMyDatasetを落とし、私はこのデータセットのFieldsコレクションのNAME
フィールドは表示されません。
私の目標は、これらの定義済みのクエリを定義して登録して、設計時に使用できるようにすることです。
このコンポーネントを使用している誰でもこのデータセットのフィールドを再定義することはできませんが、ビジュアルエディタでcxGridなどをバインドする(列の自動作成など)ことはできます。
また、このデータセットは、別のデータセットのプレースホルダにすぎません。これは、Fieldsコレクションをバインドできる他のビジュアルエディタに提示する役割しか果たしません。
私の質問は:
は、なぜ私はビジュアル・エディタで、コンストラクタで作成されたフィールドを見ることができないとどのように私はそれが見えるようにすることができますか?
TFieldのユーザー変更をDFMに保存しないようにコンポーネントの動作を変更するにはどうすればよいですか?
uses
SysUtils, Classes, DB, DBClient;
type
TMyDataSet = class(TClientDataSet)
private
FMyStringField : TStringField;
function GetMyStringField: TStringField;
protected
public
constructor Create(AOwner : TComponent); override;
property MyStringField : TStringField read GetMyStringField;
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Data Access', [TMyDataSet]);
end;
{ TMyDataSet }
constructor TMyDataSet.Create(AOwner: TComponent);
begin
inherited;
FMyStringField := TStringField.Create(AOwner);
FMyStringField.FieldName := 'NAME';
FMyStringField.Size := 80;
FMyStringField.DataSet := Self;
end;
function TMyDataSet.GetMyStringField: TStringField;
begin
Result := FMyStringField;
end;
は、あなたが簡単にあなたのコードが動作するように修正する必要がどのように識別することができるはずです。
以下はTMyDataSet項目エディタに現れてNAME
フィールドを含めて、私のために正常に動作し、あなたに
はありがとう、私はフィールドのAOwnerは、データセットの所有者でなければならないと思い、それは私が – Ludo
は私がDFMの変更を防ぐことができますどのようにあなたを知っています、私のコードを変更したときに働いたものですユーザーは? (フィールドの追加/変更を防止する)? – Ludo
"変更を防止する..."私はこの事実と、デルファイが私のコードを使用して重複した 'NAME'フィールドについて苦情を言っているという事実と関連している可能性があるので、オフチェントではありませんが、感情は@ SertacAkyuzさんの答えです。http: //stackoverflow.com/questions/38293072/how-to-correctly-stream-a-tcollection-property-of-a-subcomponent-eg-the-colum – MartynA