Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) DbGrid Zebrado


Pirambu!

Pergunta

Estou tentando mudar apenas a cor de uma determinada coluna

if Querystatus.AsString = 'Sim' then
Begin
  DbGrid1.Canvas.Font.Color := ClNavy;
  DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
  End Else
    Begin
     DbGrid1.Canvas.Font.Color := Clmaroon;
     DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
    end;

Quero mudar apenas na coluna "Status", mas fica a linha do DbGrid inteiro, como eu posso resolver isso?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Guest --José Luiz --

Tente o seguinte

procedure TF_BUS_PROD.DBGrid1DrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

begin

If Column.FieldName = 'Querystatus' then //**** Remova esta linha se você quer destacar toda a linha ****

begin

if ( Column.Field.Dataset.FieldbyName ( Querystatus' ).AsString = 'Sim' ) then begin

dbgrid1.canvas.brush.color := clGray ;

dbgrid1.DefaultDrawColumnCell ( rect, DataCol, Column, State );

end;

end ;

end;

Abraços,

José Luiz

Link para o comentário
Compartilhar em outros sites

  • 0
Tente o seguinte

procedure TF_BUS_PROD.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  If Column.FieldName = 'Querystatus' then //**** Remova esta linha se você quer destacar toda a linha ****
  begin
    if ( Column.Field.Dataset.FieldbyName ( Querystatus' ).AsString = 'Sim' ) then begin
      dbgrid1.canvas.brush.color := clGray;
      dbgrid1.DefaultDrawColumnCell ( rect, DataCol, Column, State );
    end;
  end;
end;
Boa dica Jose Luiz. Permita-me apenas corrigir o exemplo de modo a corresponder ao caso citado. O nome do campo é apenas Status, já que QueryStatus é o campo da querie adicionado em design-time. Também, como o parâmetro Column oferece a propriedade Field, não se faz necessário acessar o caminho mais longo para o valor do campo:
procedure TF_BUS_PROD.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  If Column.FieldName = 'status' then //**** Remova esta linha se você quer destacar toda a linha ****
    if (Column.Field.AsString = 'Sim' ) then begin
      dbgrid1.canvas.brush.color := clGray;

  dbgrid1.DefaultDrawColumnCell ( rect, DataCol, Column, State );
end;

obs:

1) neste método apenas deve-se ter cuidado com o tal case-sensitive, ou seja, o nome do campo na string usada no if..then tem que ser igual ao nome constante no field. Na dúvida, algo assim fica mais seguro: If UpperCase(Column.FieldName) = 'STATUS' then

2) apesar de em várias codificações vermos de forma diferente, quando definimos no DBGrid a propriedade DefaultDrawing = False, e não pintamos todo o grid por nossa conta (apenas mudamos algumas propriedades do canvas), o médoto DefaultDrawColumnCell precisa ser chamado apenas uma única vez e no final do procedimento.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...