DBGrid - Pegar texto de uma célula
06/08/2004
0
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
Posts
06/08/2004
G1b4
Ao invés de colocar um TLabel coloque um TDBText ligado ao mesmo TDataSource do TDBGrid....
Espero te-lo ajudado :wink: !!!
06/08/2004
Wbb
Isto é só um exemplo... Não é a maneira que estou usando realmente.
06/08/2004
G1b4
Foi malz... a pressa não me deixou ver a situação...
Meu exemplo é pra apenas uma coluna...
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 !!!
06/08/2004
G1b4
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] then begin indice:=DBGrid1.Columns.Grid.SelectedIndex; DBGrid1CellClick(DBGrid1.Columns.Items[indice]); end; end;
:wink:
09/08/2004
Wbb
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
09/08/2004
G1b4
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: !!!
09/08/2004
Wbb
...!?! É complicado...
Obrigado pela atenção mesmo assim. Se descobrir algo e puder me enviar, seria extremamente útil.
Valeu!
wbb
09/08/2004
G1b4
:wink:
Clique aqui para fazer login e interagir na Comunidade :)