Pintar celula DBGrid de acordo com valor no TclientDataSet
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:
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....
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
Curtidas 0
Respostas
Edilcimar
22/11/2007
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
GOSTEI 0
Joaoshi
22/11/2007
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.
if BuscaTipoResultado(IBDataSet.RecNo)= 4 then
para
if ClientDataSet.FieldByName(´TipoResultado´).as integer = 4 then
deve funcionar.
Espero ter ajudado.
GOSTEI 0
Pcsilva
22/11/2007
[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.
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.
GOSTEI 0
Luciano.lirio
22/11/2007
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.
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
GOSTEI 0