GARANTIR DESCONTO

Fórum Pintar celula DBGrid de acordo com valor no TclientDataSet #349454

22/11/2007

0

Tenho dbgrid na cor do meu formulário que esta ligada a um TClientDataSet, que contem uma coluna ´resultado´ e outra ´tipo de resultado´. Onde preciso pintar de cor branca a celula ´resultado´ quando o ´tipo resultado´ daquela linha for um determinado valor. e deixar na cor padrão quando for diferente. Não consigo saber qual linha o dbgrid está sendo pintada. No IBDataset funciona desta forma,Código:
procedure TForm1.dbgridDrawColumnCell(Sender: TObject; const Rect: TRect; 
  DataCol: Integer; Column: TColumn; State: TGridDrawState); 
begin 
  if BuscaTipoResultado(IBDataSet.RecNo)= 4 then 
  begin 
    if Column.Field = IBDataSet.fieldByName(´resultado) then 
    begin 
      dbgrid.Canvas.Brush.Color:= clwhite; 
      dbgrid.Canvas.FillRect(Rect); 
      dbgrid.DefaultDrawDataCell(Rect,Column.Field,State); 
    end; 
  end 
  else 
  begin 
    dbgrid.Canvas.Brush.Color:= clBtnFace; 
    dbgrid.Canvas.FillRect(Rect); 
   dbgrid.DefaultDrawDataCell(Rect,Column.Field,State); 
  end; 
end; 


Já no ClientDataset não funciona. Não sei porque mas no TclientDataSet o RecNo só retorna 1. Preciso saber qual linha do dbgrid esta sendo pintada no evento onDrawColumnCell para verificar no meu TclientDataSet qual é o tipo de resultado.
Se alguem puder me ajudar eu agradeço muito....


Pcsilva

Pcsilva

Responder

Posts

22/11/2007

Edilcimar

já escrevi algo sobre isto, não me recordo exatament o texto, mas com certeza era sobre cor de uma célula do dbgrid, onde de acordo com o estoque de uma filial, a cor mudava, basta dar uma procurada sobre o assunto, não era sobre um TClienteDataSet, mas específicamente sobre o dbgrid, relacionado ao valor do mesmo em relação a um campo da tabela


Responder

Gostei + 0

22/11/2007

Joaoshi

Colega, não sei se entendi direito mas se mudar:

if BuscaTipoResultado(IBDataSet.RecNo)= 4 then
para
if ClientDataSet.FieldByName(´TipoResultado´).as integer = 4 then

deve funcionar.

Espero ter ajudado.


Responder

Gostei + 0

24/11/2007

Pcsilva

[img]Joaoshi obrigado!
Mas desta forma não funciona pois ela pinta toda a coluna com o tipo de resultado do registro corrente. Preciso saber qual é o numero do linha do bdgrid para verificar qual é o tipo resultado de cada linha. Criei um vetor para armazenar a linha e tipo independete do CLientDataSet.


Responder

Gostei + 0

24/11/2007

Luciano.lirio

Use este código.
Altere o código abaixo para que funcione na tua rotina.
no exemplo abaixo todos os saldos menor que 200 serão pintados de vermelho.

  
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
   if Column.Field = ClientDataSet1SALDO then
     if ClientDataSet1SALDO.AsCurrency < 200 then
     begin
       DBGrid1.Canvas.Font.Style :=
         DBGrid1.Canvas.Font.Style + [fsBold];
       DBGrid1.Canvas.Font.Color := clRed;
       DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);
     end;
end



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar