ASP CLASSICO ASP.NET C# SQL / DATABASE VB / VBA VB.NET Todos os fóruns 

CRIAR UM EVENTO CURRENTITEMCHANGED

 Tópico anterior Próximo tópico Novo tópico

CRIAR UM EVENTO CURRENTITEMCHANGED

C#

 Compartilhe  Compartilhe  Compartilhe
#469290 - 28/11/2016 11:13:19

MRSILVA
MARINGA
Cadast. em:Julho/2015


Última edição em 28/11/2016 13:15:35 por MRSILVA

Olá pessoal.

Tenho BindingSource vinculado aos campos do meu formulários e a um DataGridWiew. Queria carregar uma variável sempre que algum campo do meu formulário seja alterado ou iniciado a digitação, estou tentando fazer através do evento CurrentItemChanged do meu BindingSource mas infelizmente não consigo implementar através das pesquisas que fiz e dos exemplos que tem na internet. Alguém tem algum exemplo se possível simplificado  de como criar esse evento ou alguma ajuda nesse sentido.


Desde já agradeço a ajuda.




#469294 - 28/11/2016 15:43:30

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
CurrentItemChanged é um evento que ocorre quando qualquer propriedade do item atual(Current) é modificada, você simplesmente delega um método à ele:


//Esse delegate vai geralmente na inicialização do form
NomeDoBindingSource.CurrentItemChanged += dados_CurrentItemChanged;

void dados_CurrentItemChanged(object sender, EventArgs e)
{
///aqui faça o que quiser, pois esse método será ativado cada vez que uma propriedade do ítem corrente mudar
}


_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#469305 - 29/11/2016 09:51:03

MRSILVA
MARINGA
Cadast. em:Julho/2015


Obrigado Kerplunk!
Achei que o evento CurrentItemChanged só era acionado quando os dados eram alterados, mas na verdade até mesmo quando alteramos de registro o mesmo já é disparado, por isso tive que utilizar o evento listChanged com base no seu exemplo já que quero controlar as alterações nos dados.
Kerplunk estou utilizando como padrão de desenvolvimento os vídeos do Youtub (basicão e reflection) que você fez, com base nisso o controle de alteração de dados é melhor ser feitas através do bindingSource ou existe outro método melhor? Tentei fazer através das classe mas não consegui.

Um exemplo que estou tentando controlar:
Quando um usuário do aplicativo altera de registro e clica em outra linha do DataGridWiew tenho que verificar se ele fez alteração no registro atual, caso tenha, tenho que pedir para ele gravar.

Aproveitando o momento queria agradecer suas aulas no Youtub são ótimas. terão mais?




#469317 - 29/11/2016 22:25:26

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Em primeiro lugar, muito obrigado! Veja que nas vídeo aulas, eu implemento propriedades "IsNew" e "IsModified" que são alteradas conforme os dados da entidade são alterados. Basta verificar essas propriedades, até mesmo com uma expressão lambda para ter uma lista de entidades alteradas.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#469320 - 29/11/2016 22:53:39

MRSILVA
MARINGA
Cadast. em:Julho/2015


Mais uma vez obrigado Kerplunk. pela sua ajuda.

Tentei fazer isso conforme os videos, mas percebi que as propriedade "IsModified" são modificadas para true em todo momento até mesmo quando clico em uma linha do meu DataGridWiew a classe é acessada e as propriedades já são alteradas dessa forma quando verifico se a propriedade foi alterada ela retorna true em todos os momentos, mesmo quando não altero nada, coloquei pontos de interrupção na minha classe para verificar esse comportamento e constatei isso, e foi por isso que partir para os eventos do bindingSource.para resolver esses problema.



#469321 - 30/11/2016 01:34:43

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Esse comportamento, é um erro proposital. Ele cai em um assunto de um vídeo mais adiante, que fala sobre depuração de erros. Para resolver, você precisa criar um outro construtor de classe que receba um parâmetro booleano. Esse parâmetro, é colocado em uma variável interna(private) e no momento da leitura dos dados(quando leio os DataReader, preenchendo as entidades), verifico essa variável. Se ele estiver "true", significa que estou lendo os dados na primeira vez, ou seja, não podem estar alterados porque estou lendo do banco e não podem ser novos pelo mesmo motivo, portanto, IsNew e IsModified devem ambas serem setadas para false, assim que terminar a leitura dos dados da entidade.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#470054 - 26/12/2016 11:04:12

MRSILVA
MARINGA
Cadast. em:Julho/2015


Obrigado Kerplunk.

Desculpe pela demora em dar retorno da sua ultima resposta, não consegui responder antes.

Tentei fazer como você orientou mas não consegui, então fiz da seguinte forma e está funcionando:

No método todos antes de carregar a lista com cada registro eu modifico a propriedade conforme abaixo.

pro._isModified = false;
_return.Add(pro);

Vou deixar o tópico em aberto por mais um tempo caso alguém queira fazer algum comentário.

Kerplunk estou ansioso por novos videos sobre orientação a objetos.




Resposta escolhida #470070 - 26/12/2016 17:41:52

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
No próximo, vamos remodelar o projeto base(de acesso à dados), para usar o LINQ e já ter uma introdução à escopo e contexto de dados. A classe Backwork é bacana para entender como funciona, mas em termos de funcionalidade, deixa muito à desejar. Como falo nos vídeos, se quisermos um método para seleção de clientes por tipo, por exemplo, precisamos criar um método específico para isso. É bacana entender como funciona, mas conforme as necessidades vão aumentando, vai se estendendo demais e a regra de "quanto mais código, mais possibilidade de erros", é válida. Com o LINQ, os métodos de procura ficam "nativos" por conta de ser implementado um QueryBuilder. Além de simplificar as decorações de classe e propriedades e uma facilidade maior para dados vínculados(Cliente -> List<Contatos>). O LINQ também é muito mais parecido(praticamente a mesma coisa) que o Entity Framework, o que já serve de introdução à ele.

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#470076 - 26/12/2016 18:15:12

MRSILVA
MARINGA
Cadast. em:Julho/2015


Valeu

Tem previsão do lançamentos dos videos?



#470087 - 26/12/2016 21:16:50

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Nope...

_______________________________________________________________________
Gostaria de ter seu sistema Desktop "traduzido" para uma interface web? Podemos conversar...
Virei Oráculo!
The end is nigh, be ready for the nukes!


#470096 - 27/12/2016 08:25:05

MRSILVA
MARINGA
Cadast. em:Julho/2015


Ok, obrigado.



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por MRSILVA em 27/12/2016 08:25:33