Criação de Componentes TdataSource e TFields
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
Curtidas 0
Respostas
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
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
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;
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
22/09/2016
Obrigado Jones Granatyr, irei dar uma olhada nas edições.
GOSTEI 0
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
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