BUG NO DATAGRIDVIEW COM BINDINGSOURCE

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

BUG NO DATAGRIDVIEW COM BINDINGSOURCE

C#

 Compartilhe  Compartilhe  Compartilhe
#487416 - 28/02/2019 12:38:53

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

 Anexos estao visíveis somente para usuários registrados

Pessoal, olhe essa situação que me deparei usando o datagridview.

Eu carrego uma lista,
Clico em uma celula
Passo o objeto via parametro para outro form
Crio uma copia do objeto  ( caso o usuário clique em cancelar )
porém, quando clico em cancelar, (para NÃO atualizar os dados) os dados CONTINUAM refletindo as atualizações que fiz nos TextBox, porém eu substituo o objeto pela cópia no botão cancelar.

estou cometendo algum erro ?  ( segue projeto )





#487422 - 28/02/2019 15:34:28

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


Membro da equipe
Como desconfiei pela sua descrição, o caso é que você está incorrendo em referenciação. Quando você instancia o Form2 com seu objeto(var frm = new Form2(row);), você está na verdade copiando o objeto. Você precisa fazer um clone dele:

var frm = new Form2(row.CloneObject());


_______________________________________________________________________
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!


#487423 - 28/02/2019 15:35:33

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


Membro da equipe
Veja que ao digitar no segundo form, ele já altera no primeiro porque o objeto é o mesmo então é natural que ele simplesmente atualize...

_______________________________________________________________________
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!


#487424 - 28/02/2019 15:44:16

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Eu não entendi muito bem a sua resposta.

Eu copio o objeto porque se o usuário clicar em CANCELAR, eu pego o objeto original e restauro,
Porém o DataGridView não reflete.

Veja que, quando eu modifico os dados nos TextBox o GRID atualiza ( como vc citou ),
Mas se eu clicar em CANCELAR, (form2_button1_Click), o objeto original é restaurado ( que foi passado no parametro do form2 e clonado )

Altere o dado do TextBox, Observe a MessageBox que aparece depois que vc clica em form2.CANCELAR




#487428 - 28/02/2019 17:03:39

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


Membro da equipe
Acho que entendi, você quer restaurar o original caso não tenha modificação, ao invés do contrário, isso?

_______________________________________________________________________
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!


#487440 - 01/03/2019 10:01:19

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Isso mesmo.




#487659 - 14/03/2019 16:47:52

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

 Anexos estao visíveis somente para usuários registrados

Acabei de descobrir OUTRO BUG relacionado ao DataBinding

Se vc ligar um controle a propriedade Visible
botao1.DataBindings.Add("Visible", dadosPgto, "pgtoSuficiente", true, DataSourceUpdateMode.OnPropertyChanged);

Ao inicializar o form, se o controle estiver com o .Visible=False, o Binding do Visible não funciona.
vou colocar um exemplo em anexo.




#487664 - 14/03/2019 20:47:50

JABA
CABO FRIO
Cadast. em:Agosto/2005


Última edição em 14/03/2019 20:52:16 por JABA

Não tem Bug nenhum, o que está acontecendo é que quando você altera o objeto no form2, o conteúdo do objeto pessoa original também é alterado na respectiva propriedade, não se tornando mais o mesmo de antes. Quando você clica no botão cancelar, a referência contida no atributo _pessoa do form2 passa a ser do objetoclonado, não se refletindo para o datagridview porque sua referência base difere da original; ou seja, a origem dela na memória é outra. Se você quiser conferir isso, é só exibi-la antes e depois da alteração ser feita, lá no botão cancelar, como está abaixo:

  
private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Objeto original: " + this._pessoa.Nome);
            this._pessoa = pessoaCopia;
            MessageBox.Show("Objeto clonado: " +  this._pessoa.Nome);
            this.DialogResult = DialogResult.OK;
        }



_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#487667 - 15/03/2019 09:13:36

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
vc chegou a testar o exemplo ?



#487676 - 15/03/2019 15:35:29

JABA
CABO FRIO
Cadast. em:Agosto/2005


Última edição em 15/03/2019 19:33:30 por JABA

Testei apenas o primeiro projeto, esse último que você enviou, não.

OBS: Só lembrando que o teste que eu pedi tem que ser feito depois que o objeto foi alterado, tendo o valor do campo nome diferente do inicial.

_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



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


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário