Fórum Erro No Filtro Dbgrid #420318
23/07/2012
0
Estou com problema ao filtrar dados em meu Dbgrid depois que coloquei esse comando abaixo em meu Dbgrid,todo filtro que faço que possue no dbgrid me retorna erro.
Ex : Quando Filtro todo nome que começa com JOSE ele me retorna dados e quandi for filtrar todo nome Marcos se ele não encontrar ele me da erro (is not as Valid date and Time)
procedure TForm4.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataSource1.DataSet.FieldByName(VAL_CNH).AsDateTime < date Then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
begin
if DataSource1.DataSet.FieldByName(VAL_ASO).AsDateTime < date Then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
begin
if DataSource1.DataSet.FieldByName(VAL_INTEG).AsDateTime < date Then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
begin
if CLIENTDATASET1.FieldByName(STATUS).Value = BLOQUEADO then
DBGrid1.Canvas.Font.Color := clRed;
if CLIENTDATASET1.FieldByName(STATUS).Value = DESBLOQUEADO then
DBGrid1.Canvas.Font.Color := clblack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
end;
end;
end;
end;
E para executar o filtro eu uso esse comando abaixo.
procedure TForm4.RzEdit1Change(Sender: TObject);
begin
clientdataset1.Filtered := False;
clientdataset1.filter := EMPRESA LIKE +
QuotedStr(RZEDIT1.Text+%);
clientdataset1.Filtered := true;
end;
procedure TForm4.RzEdit2Change(Sender: TObject);
begin
clientdataset1.Filtered := False;
clientdataset1.filter := NOME LIKE +
QuotedStr(RZEDIT2.Text+%);
clientdataset1.Filtered := true;
end;
end.
Watson Rocha
Curtir tópico
+ 0Posts
23/07/2012
Marco Salles
procedure TForm4.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
if TDBGrid(sender).DataSource.DataSet.IsEmpty then
exit
seu codigo
Gostei + 0
23/07/2012
Watson Rocha
Sim , se na DBGRID ele tiver registro de nomes com a letra A por exemplo ele retorna dados legalzinho, agora se na DBGRID nao tiver nome que começa com a letra A por exemplo ela me retorna erro is not as Valid date and time )
Referente ao comando que você passou , me desculpe a ousadia é que não sei mesmo, mas seria mais ou menos como está abaixo.
begin
if Dbgrid1(sender).DataSource.DataSet.IsEmpty Then
if DataSource1.DataSet.FieldByName(VAL_CNH).AsDateTime < date Then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
Gostei + 0
23/07/2012
William
Se CDS.Vazio entao
exit;
Senao
Executa seu código;
Fimse
Gostei + 0
23/07/2012
Marco Salles
Porém acredito que a usa contestação é referengte a sintaxi do Delphi
Vc disse
if Dbgrid1(sender).DataSource.DataSet.IsEmpty Then
Olha so DbGrid1 Não uem classe e sim um Objeto
Vc deve aplicar o Typcast em um classe
TDbgrid(sender).DataSource.DataSet.IsEmpty
e por falar nisso vc pode utilizar todo o seu código utilizando esta conversão ao Invez dos nomes
DataSource1 , DBGrid1 etc...
claro que para não repetir esta código ao longo do método vc pode utilizar o Operador WITH
que para códigos longos e complicados deve ser evitado ou utilizar um ponteiro
var
Data:TDataSet;
begin
Data:=TDbgrid(sender).DataSource.DataSet;
if Data.IsEmpty then ... e por ai Vai
Leia com atenção o que o colega wllfl postou e também o que comentei anteriormente . Duvidas questione
[]sds
Gostei + 0
23/07/2012
Watson Rocha
Abraço
Gostei + 0
23/07/2012
William
Gostei + 0
23/07/2012
Watson Rocha
Pois fiz o formato do banco é a mesma do edit .
Gostei + 0
23/07/2012
Marco Salles
Se CDS.Vazio entao
exit;
Senao
Executa seu código;
Fimse
Vc disse :
Marcos acabei de fazer esse esquema , que você me passou ainda continua dando erro is not Valid as date and time na consulta do filtro do edit
Abraço
Acho que vc não fez .. Pois caso tenha feito ele ira sair pelo exit
Gostei + 0
23/07/2012
Watson Rocha
procedure TForm4.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Data: TDataset;
begin
Data:=Dbgrid1.DataSource.DataSet;
if Data.IsEmpty Then
if DataSource1.DataSet.FieldByName(VAL_CNH).AsDateTime < date Then <<---nessa parte ela da erro!
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
begin
if DataSource1.DataSet.FieldByName(VAL_ASO).AsDateTime < date Then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
begin
if DataSource1.DataSet.FieldByName(VAL_INTEG).AsDateTime < date Then
DBGrid1.Canvas.Font.Color := clRed;
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
begin
if CLIENTDATASET1.FieldByName(STATUS).Value = BLOQUEADO then
DBGrid1.Canvas.Font.Color := clRed;
if CLIENTDATASET1.FieldByName(STATUS).Value = DESBLOQUEADO then
DBGrid1.Canvas.Font.Color := clblack;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(Rect, DBGrid1.columns[datacol].field, State);
end;
end;
end;
end;
end.
Gostei + 0
23/07/2012
William
[code]
if Data.IsEmpty Then //Se data estiver vazio então execute código
Gostei + 0
23/07/2012
William
Gostei + 0
23/07/2012
Watson Rocha
Gostei + 0
23/07/2012
William
Gostei + 0
23/07/2012
William
procedure TForm1.grd1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if not ClientDataSet.IsEmpty Then
begin
if dts1.DataSet.FieldByName(DATA_CADASTRO).AsDateTime < date Then
begin
grd1.Canvas.Font.Color := clRed;
grd1.DefaultDrawDataCell(Rect, grd1.columns[datacol].field, State);
end;
end;
end;
O código só será executado se o ClientDataSet NÃO estiver vázio, caso contrário ele não entra na instrução então não tem erro.
Gostei + 0
24/07/2012
Watson Rocha
te adicionei no Shype ,caso aconteça alguma coisa segue o meu ID do skype rocha325
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)