Fórum Alterar Cor no DBGrid por Grupo #371423

19/06/2009

0

Olá pessoal...

Já procurei aqui no forum, achei vários exemplos, porém, nenhum se relacionava especificamente com a minha dúvida.

Tenho um Grid que retorna o resultado de uma cotação entre vários fornecedores e dependendo do resultado as vezes mais de um fornecedor ganha a cotação em diferentes produtos ou seja;

Fornecedor1 ProdutoX Valor
Fornecedor1 ProdutoY Valor
Fornecedor2 ProdutoZ Valor
Fornecedor3 ProdutoW Valor
Fornecedor3 ProdutoK Valor

Gostaria de saber se alguem tem alguma funcão ou procedimento ou maneira de que quando eu receber este resultado, cada grupo do mesmo fornecedor tivesse uma cor diferente que até poderia ser aleatória ou não no grid.

Exemplo1:
Fornecedor1 ProdutoX Valor (verde)
Fornecedor1 ProdutoY Valor (verde)
Fornecedor2 ProdutoZ Valor (Amarelo)
Fornecedor3 ProdutoW Valor (Azul)
Fornecedor3 ProdutoK Valor (Azul)

ou

Exemplo2:
Fornecedor1 ProdutoX Valor (verde)
Fornecedor1 ProdutoY Valor (verde)
Fornecedor2 ProdutoZ Valor (Amarelo)
Fornecedor3 ProdutoW Valor (Verde)
Fornecedor3 ProdutoK Valor (Verde)


Desde já agradeço!

Márcio M. Camilo


Mmcamilo

Mmcamilo

Responder

Posts

19/06/2009

Tonidavi2004

Basta você usar o evento do próprio DbGrid.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DataSource1.DataSet.FieldByName(´Cod_Fornecedor1´).AsInteger = Cod_Fornecedor1 then
    DBGrid1.Canvas.Brush.Color := clGreen;

  if DataSource1.DataSet.FieldByName(´Cod_Fornecedor2´).AsInteger = Cod_Fornecedor2 then
    DBGrid1.Canvas.Brush.Color := clYellow;

  if DataSource1.DataSet.FieldByName(´Cod_Fornecedor3´).AsInteger = Cod_Fornecedor3 then
    DBGrid1.Canvas.Brush.Color := clBlue;

  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;



Responder

Gostei + 0

21/06/2009

Mmcamilo

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if DataSource1.DataSet.FieldByName(´Cod_Fornecedor1´).AsInteger = Cod_Fornecedor1 then DBGrid1.Canvas.Brush.Color := clGreen; if DataSource1.DataSet.FieldByName(´Cod_Fornecedor2´).AsInteger = Cod_Fornecedor2 then DBGrid1.Canvas.Brush.Color := clYellow; if DataSource1.DataSet.FieldByName(´Cod_Fornecedor3´).AsInteger = Cod_Fornecedor3 then DBGrid1.Canvas.Brush.Color := clBlue; DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State); end;

Obrigado pela dica, porém ainda não foi suficiente, uma vez que não sei o código do fornecedor ganhador da cotação e nem a quantidade de fornecedores que estarão ganhando a cotação.... Se fosse fixo seu exemplo seria satisfatório.

Se alguem ainda tiver mais uma dica, agradeço.

Márcio


Responder

Gostei + 0

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

Aceitar