Criação de Componentes TdataSource e TFields

Delphi

22/09/2016

Gostaria de criar um componente que contenha a propriedade TDataSource e um lista de Fields. Quando o datasource for vinculado ao componente o mesmo irá carregar nas propriedades fields a lista de campos ligados ao DataSource.DataSet.Fields[0].AsString. A rotina será parecida com a função que existe no DBGrid. A minha duvida é o seguinte: Como criar uma Lista no estilo ComboBox com base no resultado de um dataset, pois consigo criar essa lista da forma de enum (campos fixos) gostaria que fossem dinamicos.
Lj Sistemas

Lj Sistemas

Curtidas 0

Respostas

Jones Granatyr

Jones Granatyr

22/09/2016

Olá,

Não entendi muito bem a dúvida, mas dê uma olhada na seguintes edições da Clube Delphi: 53, 71, 72 e 98. Lá tem alguns artigos sobre criação de componentes que talvez possa ajudar :)

Jones
GOSTEI 0
Hélio Devmedia

Hélio Devmedia

22/09/2016

Faz assim:

type
TPDDEditFilter = class(TMaskEdit)
private
FDataLink: TDataLink;
public
constructor Create (AOwner: TComponent); override;
property DataField: string read GetDataField write SetDataField;
property DataSource: TDataSource read GetDataSource write SetDataSource;
end;

constructor TPDDEditFilter.Create(AOwner: TComponent);
begin
inherited;
FDataLink := TFieldDataLink.Create;

FDataLink.Control := Self;
end;

function TPDDEditFilter.GetDataField: string;
begin
Result := FDataLink.FieldName;
end;

procedure TPDDEditFilter.SetDataField(const Value: string);
begin
FDataLink.FieldName := Value;
end;

function TPDDEditFilter.GetDataSource: TDataSource;
begin
Result := FDataLink.DataSource;
end;

procedure TPDDEditFilter.SetDataSource(const Value: TDataSource);
begin
FDataLink.DataSource := Value;
end;
GOSTEI 0
Lj Sistemas

Lj Sistemas

22/09/2016

Obrigado Jones Granatyr, irei dar uma olhada nas edições.
GOSTEI 0
Lj Sistemas

Lj Sistemas

22/09/2016

HÉLIO CARLOS, consegui fazer da forma que você me passou e funcionou legal, só que quando eu levei a property DataField: string read GetDataField write SetDataField; para dentro de uma coleção, lá não listou os campos da mesma forma que havia listado quando as property DataField e a property DataSource estavam na mesma coluna de propriedades do objeto inspector. Estou querendo fazer da mesma forma que funciona o DBGrid, ligo o datasource ao component (meu componente), depois vou na propriedade colunas, adiciono uma nova coluna e seleciono a propriedade DataField contendo a lista de fields que estão vinculados pelo datasource.
GOSTEI 0
Hélio Devmedia

Hélio Devmedia

22/09/2016

No caso você precisa na verdade, é criar um editor de propriedades com um listBox, mas os nomes tem que serem guardados como string, e referenciando Fields em uma coleção.
GOSTEI 0
POSTAR