DBGrid - Pegar texto de uma célula

06/08/2004

Olá!

Gostaria de saber como pegar o texto de uma célula qualquer de um DBGrid. Eu sei que clicando com o mouse sobre a célula é fácil, conforme abaixo:

procedure Tform1.DBGrid1CellClick(Column: TColumn);
begin
label1.Caption := Column.Field.Value;
end;


Porém, eu preciso saber como pegar o texto de uma célula, apenas me movimentando pelas células do DBGrid por meio das setas do teclado. Ou seja, como obter o resultado do código acima, sem clicar na célula com o mouse e apenas usando as setas do teclado.

Valeu!
wbb


Wbb

Respostas

06/08/2004

G1b4

Caro wbb,
Ao invés de colocar um TLabel coloque um TDBText ligado ao mesmo TDataSource do TDBGrid....


Espero te-lo ajudado :wink: !!!


Responder Citar

06/08/2004

Wbb

Caro g1b4!

Isto é só um exemplo... Não é a maneira que estou usando realmente.


Responder Citar

06/08/2004

G1b4

Caro wbb,
Foi malz... a pressa não me deixou ver a situação...

Meu exemplo é pra apenas uma coluna...

procedure TForm1.DBGrid1CellClick(Column: TColumn); begin Label1.Caption:=Column.Field.Value; end;


Faça assim... Utilizando o seu exemplo acima:

procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
  DBGrid1.OnCellClick:=DBGrid1.OnCellClick;
end;


Assim você executa o seu OnCellClick navegando sem o mouse....

Espero AGORA te-lo ajudado !!!


Responder Citar

06/08/2004

G1b4

esquece viajei.... :oops:


Responder Citar

06/08/2004

G1b4

Coloque no form keypreview=true. Agora funciona :D ! O último que fiz, postei mas não testei. Fui testar depois. Mas esse eu testei....

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
  Label1.Caption:=Column.Field.AsString;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  indice :integer;
begin
  if (Sender as TForm).ActiveControl is TDBGrid then
     if key in [vk_DOWN,vk_Up,vk_LEFT,vk_RIGHT&93; then begin
        indice:=DBGrid1.Columns.Grid.SelectedIndex;
        DBGrid1CellClick(DBGrid1.Columns.Items&91;indice&93;);
     end;
end;


:wink:


Responder Citar

09/08/2004

Wbb

Legal g1b4! Valeu!

Agora sem querer abusar, estou com um outro problema... Num campo numérico do banco de dados, que é mostrado no DBGrid, eu acessei o TFiled correspondente no Dataset e já coloquei as propriedades DisplayFormat e FormatEdit em [b:17be35310e]#,0.00[/b:17be35310e], além de colocar em True a propriedade Currency do mesmo TField, tudo isso com o objetivo de que o número seja mostrado como valor monetário. Até aí ok! Só que quando vou digitar um número neste campo do DBGrid e tento colocar mais de uma vírgula no número, ele aceita. Aí, ao tentar salvar este número com formato inválido, o Dataset gera um erro. Afinal um número com mais de uma vírgula é inválido.

Tem como impedir que o usuário consiga digitar mais de uma vírgula? Ou então se digitar, tem como reformatar o número antes de ser gerado o erro?

Valeu!
wbb


Responder Citar

09/08/2004

G1b4

Tem como impedir que o usuário consiga digitar mais de uma vírgula? Ou então se digitar, tem como reformatar o número antes de ser gerado o erro?


A primeira pergunta: você pode colocar uma variavel global do tipo inteira na sua Unit e no evento OnKeyPress fazer um contador, depois se o contador for=1, não permitirá mais a virgula.

Segunda Pergunta: Claro que sim, mas como saber onde formato o valor? Não tem como você saber qual é o valor pretendido. Neste caso, acho melhor gerar a mensagem do erro e limpar o campo...

Espero te-lo ajudado :wink: !!!


Responder Citar

09/08/2004

Wbb

Quanto à variável global eu já tentei exatamente como você falou, e funciona. Só que tem um problema: Se o campo já estiver preenchido, eu identifico se já tem ou não vírgula ao entrar no campo. Até aí ok. Só que após entrar no campo, eu não tenho como saber o que foi digitado antes que seu conteúdo seja salvo no BD. É aí que o erro ocorre e é pelo mesmo motivo que eu não tenho como gerar uma mensagem ao usuário.

...!?! É complicado...

Obrigado pela atenção mesmo assim. Se descobrir algo e puder me enviar, seria extremamente útil.

Valeu!
wbb


Responder Citar

09/08/2004

G1b4

Se o campo já tem valor e for identificado vírgula, você atribui à sua variável global o valor 1. Assim não poderá digitar mais a virgula. Só que tem uma coisa, caso o usuário apague a vírgula o campo não deixará colocar nova virgula. Então, no evento OnKeyPress você terá que sempre fazer a verificação´, se tiver virgula contador = 1 (não permite uso de virgula), caso não contador = 0(permite uso de virgula).
:wink:


Responder Citar