Fórum Mudar propridade EditMask Todos os Campos de ClientDataSet #353579
13/02/2008
0
Preciso de uma rotina para mudar uma propriedade (editMask) de todos os campos de um ClientDataSet.
O nome do clientDataSet é ClientDataSet1, mas os nomes dos campos não vou saber em tempo de projeto, pois quero fazer isso em vários clientDataSet e serão vários campos.
A idéia eu tive, mas não sei como implementar. Seria uma coisa mais ou menos assim:
for I := 0 to ClientDataSet1.FieldCount -1 do
if ClientDataSet1[b:f1f2c999e6].campo[I] é campo tipo data[/b:f1f2c999e6] then
[b:f1f2c999e6]ClientDataSet1.campo[I].EditMask[/b:f1f2c999e6] := ´99/99/9999;1;_´
Obs.: a parte em[b:f1f2c999e6] negrito[/b:f1f2c999e6] é que eu inventei só para poder expor o que desejo.
Quem puder ajudar, agradeço. Qualquer dica serve.
Obrigado
Armindo
Curtir tópico
+ 0Posts
13/02/2008
Ara.es
for i := 0 to ClientDataSet1.FieldCount - 1 do begin if ClientDataSet1.Fields.Fields[i].DataType = TBCDField then begin ClientDataSet1.Fields.Fields[i].EditMask := ´99/99/9999;1;_´; end; end;
vc tinha a ideia certa, acho q so faltou achar as propriedades para manipular os fields... ta ai.. boa sorte.. flw!!!
Gostei + 0
13/02/2008
Paullsoftware
for i := 0 to ClientDataSet1.FieldCount - 1 do begin if ClientDataSet1.Fields.Fields[i].DataType = TBCDField then begin ClientDataSet1.Fields.Fields[i].EditMask := ´99/99/9999;1;_´; end; end;
for i := 0 to ClientDataSet1.FieldCount - 1 do begin if ( ClientDataSet1.Fields.Fields[i].DataType = TDateField ) or ( ClientDataSet1.Fields.Fields[i].DataType = TBCDField ) then begin ClientDataSet1.Fields.Fields[i].EditMask := ´99/99/9999;1;_´; end; end;
Gostei + 0
13/02/2008
Armindo
Já tá funcionanndo. Só tem mais uma propriedade (.displayFormat) dos campos que eu gostaria de formatar e que não está dando certo.
Quando vou compilar diz que a propriedade não existe. Como eu poderia resolver?
procedure TFPrincipal.FormataCampos;
Var
I, M : Integer;
VCDS : TClientDataSet;
begin
With DM do
for i := 0 to ComponentCount - 1 do
if Components[I] is TClientDataSet then
begin
VCDS := (Components[I] as TClientDataSet);
for M := 0 to VCDS.FieldCount -1 do
if VCDS.Fields.Fields[M].DataType = ftDate then
begin
VCDS.Fields.Fields[M].EditMask := ´99/99/9999;1;_´; [b:a5d3c50f33]funciona blz[/b:a5d3c50f33]
VCDS.Fields.Fields[M].DisplayFormat := ´dd/mm/yyyy´; [b:a5d3c50f33]não funciona - não reconhece a propriedade .displayFormat[/b:a5d3c50f33]
end
else
if VCDS.Fields.Fields[M].DataType = ftBCD then
VCDS.Fields.Fields[M].displayFormat := ´#,0.00´
else
if VCDS.Fields.Fields[M].FieldName = ´CNPJ´ then
VCDS.Fields.Fields[M].EditMask := ´99.999.999/9999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CPF´ then
VCDS.Fields.Fields[M].EditMask := ´999.999.999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CEP´ then
VCDS.Fields.Fields[M].EditMask := ´99.999-999;1;_´;
end;
end;
Obrigado.
Gostei + 0
13/02/2008
Armindo
Mas só consegui com a ajuda inicial dos colegas. Obrigado.
Deixo aqui a função completa para outros que precisarem.
procedure FormataCampos;
Var
I, M : Integer;
VCDS : TClientDataSet;
begin
With DM do //DM é o meu DataModule ondes tão todos os clientsDataSet
for i := 0 to ComponentCount - 1 do
if Components[I] is TClientDataSet then
begin
VCDS := (Components[I] as TClientDataSet);
for M := 0 to VCDS.FieldCount -1 do
if VCDS.Fields.Fields[M].DataType = ftDate then
begin
VCDS.Fields.Fields[M].EditMask := ´99/99/9999;1;_´;
TNumericField(VCDS.Fields.Fields[M]).DisplayFormat := ´dd/mm/yyyy´;
end
else
if VCDS.Fields.Fields[M].DataType = ftFMTBcd then
TNumericField(VCDS.Fields.Fields[M]).DisplayFormat := ´#,0.00´
else
if VCDS.Fields.Fields[M].FieldName = ´CNPJ´ then
VCDS.Fields.Fields[M].EditMask := ´99.999.999/9999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CPF´ then
VCDS.Fields.Fields[M].EditMask := ´999.999.999-99;1;_´
else
if VCDS.Fields.Fields[M].FieldName = ´CEP´ then
VCDS.Fields.Fields[M].EditMask := ´99.999-999;1;_´;
end;
end;
Gostei + 0
17/02/2008
Armindo
Essa rotina dá certo se você aplicá-la depois que ativar o ClientDataSet. Se você der um .close e um .open no ClientDataSet, a propriedade atribuída perde o valor.
Se alguém souber como resolver, por favor, registre aqui.
obrigado.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)