Duvida DBGRID
Olá pessoal,
como posso fazer para alterar o valor de um campo para exibição no dbgrid? Por exemplo, um campo ´lógico´, desejo que apareça em vez de True e False, SIM ou NÃO.
Outro problema semelhante: um campo criptografado, ao ser exibido no dbgrid, gostaria que aparecesse sem a criptografia. Onde posso inserir a rotina para descriptografar este campo na exibição do dbgrid?
(delphi 5 com arqs. Paradox)
Grato.
como posso fazer para alterar o valor de um campo para exibição no dbgrid? Por exemplo, um campo ´lógico´, desejo que apareça em vez de True e False, SIM ou NÃO.
Outro problema semelhante: um campo criptografado, ao ser exibido no dbgrid, gostaria que aparecesse sem a criptografia. Onde posso inserir a rotina para descriptografar este campo na exibição do dbgrid?
(delphi 5 com arqs. Paradox)
Grato.
Rikardo
Curtidas 0
Respostas
Fernando
02/07/2003
085 - Trocando a cor da fonte num DBGrid
Coloque a propriedade defaultdrawdata do dbgrid em FALSE;
No evento onDrawColumnCell do dbgrid coloque o código para mudar a cor do font do dbgrid e a chave do método para ´desenhar´ os dados.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const
Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
begin
If Condição then Dbgrid1.Canvas.Font.Color:= clFuchsia; // coloque aqui a cor desejada
Dbgrid1.DefaultDrawDataCell(Rect, dbgrid1.columns[datacol].field, State);
end
Esse exemplo acima para podera também mudar o ampo de exibição
Coloque a propriedade defaultdrawdata do dbgrid em FALSE;
No evento onDrawColumnCell do dbgrid coloque o código para mudar a cor do font do dbgrid e a chave do método para ´desenhar´ os dados.
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
const
Rect: TRect;
DataCol: Integer;
Column: TColumn;
State: TGridDrawState);
begin
If Condição then Dbgrid1.Canvas.Font.Color:= clFuchsia; // coloque aqui a cor desejada
Dbgrid1.DefaultDrawDataCell(Rect, dbgrid1.columns[datacol].field, State);
end
Esse exemplo acima para podera também mudar o ampo de exibição
GOSTEI 0
Jairroberto
02/07/2003
Olá, Rikardo!
Há algumas propriedades e eventos do objeto TField que podem fazer milagres:
No campo lógico (TBooleanField) basta você definir a propriedade [color=blue:c023683e26]DisplayValues[/color:c023683e26] para ´SIM;NÃO´ ou ´S;n´ ou ´;NÃO´ ou qualquer outro conjunto de duas strings sendo que a primeira (antes do ponto e vírgula) corresponde ao valor True e a segunda ao valor False;
Com o campo criptografado você pode utilizar o evento [color=blue:c023683e26]OnGetText[/color:c023683e26] do objeto TField para acessar a rotina que descriptografa o conteúdo daquele campo específico. Neste evento, o parâmetro [i:c023683e26]Text[/i:c023683e26] deve receber o conteúdo que você deseja exibir e o parâmetro [i:c023683e26]DisplayText[/i:c023683e26] indica se o evento deve retornar o valor de exibição (normalmente acessado pela propriedade DisplayText do objeto TField e também usado para exibir o conteúdo do campo nos componentes Dataware como TDBEdit) ou o valor não formatado do campo (normalmente retornado pela propriedade Value ou AsString do objeto TField, usadas para acessar o conteúdo original - não formatado - do campo). Veja um exemplo:
A utilização do objeto TField para este tipo de procedimento é bastante recomendada pois concentra as regras de negócios em uma camada anterior à exibição dos dados. Desta forma, utilizando um DataModule você terá certeza de que os dados estão sendo exibidos corretamente por qualquer formulário ou relatório que acesse as tabelas deste DataModule.
Um abraço,
Jair
Há algumas propriedades e eventos do objeto TField que podem fazer milagres:
No campo lógico (TBooleanField) basta você definir a propriedade [color=blue:c023683e26]DisplayValues[/color:c023683e26] para ´SIM;NÃO´ ou ´S;n´ ou ´;NÃO´ ou qualquer outro conjunto de duas strings sendo que a primeira (antes do ponto e vírgula) corresponde ao valor True e a segunda ao valor False;
Com o campo criptografado você pode utilizar o evento [color=blue:c023683e26]OnGetText[/color:c023683e26] do objeto TField para acessar a rotina que descriptografa o conteúdo daquele campo específico. Neste evento, o parâmetro [i:c023683e26]Text[/i:c023683e26] deve receber o conteúdo que você deseja exibir e o parâmetro [i:c023683e26]DisplayText[/i:c023683e26] indica se o evento deve retornar o valor de exibição (normalmente acessado pela propriedade DisplayText do objeto TField e também usado para exibir o conteúdo do campo nos componentes Dataware como TDBEdit) ou o valor não formatado do campo (normalmente retornado pela propriedade Value ou AsString do objeto TField, usadas para acessar o conteúdo original - não formatado - do campo). Veja um exemplo:
procedure TForm1.Table1CampoCriptografadoGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin if DisplayText then Texto := Descriptografa(Sender.AsString) else Texto := Sender.AsString; end;
A utilização do objeto TField para este tipo de procedimento é bastante recomendada pois concentra as regras de negócios em uma camada anterior à exibição dos dados. Desta forma, utilizando um DataModule você terá certeza de que os dados estão sendo exibidos corretamente por qualquer formulário ou relatório que acesse as tabelas deste DataModule.
Um abraço,
Jair
GOSTEI 0