Conteudo da celula do DbGrid

Delphi

26/07/2006

E ai galera

alguem saberia me informar se uma maneira de pegar o conteudo da celula do dbgrid antes mesmo que seja salvado no BD

ou seja eu digito o valor ( texto ) e logo em seguida clico em buttaoe deve aparecer uma mensagem com conteudo que digitei na celuna do dbgrid

Essa maneira naum da certo tabelacampo.asString porque esta informação ainda naum esta salvo no BD como comentei acima

desde ja agradeço


Biodelphi

Biodelphi

Curtidas 0

Respostas

Marco Salles

Marco Salles

26/07/2006

Essa maneira naum da certo tabelacampo.asString porque esta informação ainda naum esta salvo no BD como comentei acima


Estou meio surpreso , visto que ao perder o foco da coluna da grid o evento Onchange do Tfield é disparado.....

mesmo que o valor ainda não esteja gravado no base de dados o valor do tabelacampo.asString sera o valor digitado na celula da grid

Veja , voce so não tem este valor em alguns eventos que antecedem o evento onChange do Tfield , com por exemplo o evento OnKeyPress da celula do DbGrid

Tanto é verdade que se voce ter um campo Data e na celula do grid correspondende voce digitar un valor inválido , ao tentar sair da celula o delphi te notifica

:cry: :cry: :cry: Eu não entendi direito sua duvida.


GOSTEI 0
Biodelphi

Biodelphi

26/07/2006

Digamos assim então, teria como eu pegar o conteudo da celula antes mesmo de passar pelo evento Onchange do Tfield


GOSTEI 0
Marco Salles

Marco Salles

26/07/2006

Digamos assim então, teria como eu pegar o conteudo da celula antes mesmo de passar pelo evento Onchange do Tfield


jeito tem , mas poderia ser mais insisivo no seu problema. Para quem sabe acharmos uma solução

Veja , que tanto nos , como o própio delphi ficamos a priori sem saber como definir o que é o conteudo da celula do dbgrid sem que a gente faça menção de sair desta celula...

[b:fb0c553e0d]O Conteudo de uma celula de um campo integer sera o primeiro numero que voce digitou na célula Exe : 1 ???? Ou sera os dois primeiros numeros exe : 11 ??? ou sera os tres primeiros numeros Ex:111, etc.. e assim vai[/b:fb0c553e0d]


GOSTEI 0
Biodelphi

Biodelphi

26/07/2006

Tao ta, vou explicar o caso

tenho um cadastro de produto

e um cadastro de pedido

quando digito os itens do pedido começo digitado o codigo do produto


entao antes mesmo de sair da celula ja com o codigo do produto digitado o usuario acessar uma opção por um popup que abre o cadastro de produtos ja aparecendo os dados do produto que ele digitou no pedido

So que isso tem que ser feito antes da opção do validade. ( esse que é o meu problema ) o cliente quer que seja assim

podia fazer isso td no validade mais não posso :?


GOSTEI 0
Marco Salles

Marco Salles

26/07/2006

podia fazer isso td no validade mais não posso 


onvalidade ocorre depois que o onchange , acho que nesse caso seria melhor antes...

entao antes mesmo de sair da celula ja com o codigo do produto digitado o usuario acessar uma opção por um popup que abre o cadastro de produtos ja aparecendo os dados do produto que ele digitou no pedido


geralmente a gente usa um campoLook Para isto

mas me responda o seguinte:

[b:74832ed124]o usuario acessar uma opção por um popup que abre o cadastro de produtos[/b:74832ed124]


nesse momento , é so fazer com que a celula perca o foco ... Não teria como fazer isto ???? Porque eu to perguntando isto ??? Porque tem situçoes que mesmo acionando componentes o foco continua com o antigo e eu não sei como é criado este Popup
[b:74832ed124]Então devemos forçar a perca do foco e depois retornar o foco para a coluna da grid[/b:74832ed124]

[b:74832ed124]com isto voce ja tem o Tão esperado tabelacampo.asString [/b:74832ed124]

Entendeu esta idéia ??? :?: :?: :?:


GOSTEI 0
Biodelphi

Biodelphi

26/07/2006

a ideia é boa

ja tinha pensado nisso

mais nao posso porque eu uso o evento validade para fazer umas coisinhas e fazendo essa jogada ele vai disparar o validade sozinho
por isso naum pode preciso pegar o conteudo da celula antes

não ta facil :!:


GOSTEI 0
Marco Salles

Marco Salles

26/07/2006

não ta facil


Outra idéia então...

eu não sei com voce esta criando este popup , mas o codigo abaixo deve funcionar se ele for criado no estilo ´SowModal´


A idéia é programar o evento OnsetText do Tfield Codigo

procedure TForm1.NomeDoSeuDataSetCampoSetText(Sender: TField;
  const Text: String);
begin
//desconnecta o manipulador de evento Onsettext do seu Campo
 NomeDoSeuDataSetCampo.OnSetText:=nil;  
//uma variavel Global capta o Valor da celula da Grade
 valorDaCelula:=text; 
//Abre o Popup em Estilo ShoModal
 Form2.ShowModal; 
//Grava o Valor da celula na Base De Dados
 sender.text:=Text;
//reconecta o Manipulador de eventos
 NomeDoSeuDataSetCampo.OnSetText:=NomeDoSeuDataSetCampoSetText;
end;


Note que o evento OnValidadeDoCampo

procedure TForm1.NomeDoSeuDataSetCampoValidate(Sender: TField);
begin
showmessage(´é executado depois do OnSetText do Campo´);
end;


so para finalizar duas coisas:
a)eu não sei porque disse que o evento onchange ocorre antes que o evento OnValidade. De Fato ocorre depois
b)O Código acima para funcionar requer que o Popup seje abreto em estilo ShowModal , eu não sei se é este o seu caso.

Boa sorte e nos comunique


GOSTEI 0
Biodelphi

Biodelphi

26/07/2006

Blz.. essa dica pode mesmo me ajudar mas da mesmo forma tenho que forçar a saida da celula falew

Sobre o onChange nem eu naum sei porque falei isso de ocorrer antes

E quando me referia a popup tava querendo dizer que era o componente TPopup

resumindo em outras palavras minha logica

era pra ser +/- assim

digita o conteudo no grid(celula)
antes mesmo de dar (enter sair da celula ) com o botao direito abro um MENU POPUP que tem uma opcao digamos com o nome de ver valor
quando clico aparece uma msg com o texto digitado at o momento na celula ativa do grid

Faleu pela força :D


GOSTEI 0
Marco Salles

Marco Salles

26/07/2006

essa dica pode mesmo me ajudar mas da mesmo forma tenho que forçar a saida da celula falew


desconheço , com pegar o conteudo do dbgrid sem que se ´saia´ da celula , pela simples razão que expos anteriormente.

O Conteudo de uma celula de um campo integer sera o primeiro numero que voce digitou na célula Exe : 1 ???? Ou sera os dois primeiros numeros exe : 11 ??? ou sera os tres primeiros numeros Ex:111, etc.. e assim vai


Qualquer dificuldade volte a postar , ´pois ja estamos quase lá´


GOSTEI 0
POSTAR