I am not able to properly create and populate spring4d ObjectDataSet at run time,an exception saying "Field ID has no dataset, (Creating fields at design-time work fine) here is my code:
procedure TForm2.FormCreate(Sender: TObject);
var
_id: TIntegerField;
_designation: TStringField;
_dataset: TObjectDataSet;
_artList: IList<TArticle>;
begin
_artList := TCollections.CreateList<TArticle>(true);
_artList.add(TArticle.Create(1, 'Article 1'));
_artList.add(TArticle.Create(2, 'Article 2'));
_artList.add(TArticle.Create(3, 'Article 3'));
_dataset := TObjectDataSet.Create(self);
_dataset.DataList := _artList as IObjectList;
_id := TIntegerField.Create(self);
_id.FieldKind := fkData;
_id.Name := 'fid';
_id.FieldName := 'ID';
_designation := TStringField.Create(self);
_designation.Size := 100;
_designation.FieldKind := fkData;
_designation.FieldName := 'Designation';
with _dataset.Fields do
begin
add(_id);
add(_designation);
end;
DataSource1.DataSet := _dataset;
// self.DBEdit1.DataField := 'ID';
// self.DBEdit2.DataField := 'Designation';
_dataset.Open;
_active := true;
end;
TFields.Add
does not set the DataSet property of the passed field. That is nothing specific to the Spring4D TObjectDataSet
but inside of Data.DB.pas
. When you are creating a field at designtime the designer sets the DataSet
property of the field (see DSDefine.pas
)