CRIAR UM EVENTO CURRENTITEMCHANGED
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.
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.
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
}
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?
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?
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.
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.
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.
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.
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.
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.
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.
Valeu
Tem previsão do lançamentos dos videos?
Tem previsão do lançamentos dos videos?
Nope...
Ok, obrigado.
Tópico encerrado , respostas não são mais permitidas