DATABINDING COMBOBOX NAO FUNCIONA

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

DATABINDING COMBOBOX NAO FUNCIONA

C#

 Compartilhe  Compartilhe  Compartilhe
#479662 - 16/02/2018 23:09:11

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Salve VBM!!!  

            nCombo.DataSource = null;
            nCombo.DataSource = new BindingSource(listaPessoas, null);

            nCombo.ValueMember = "Codigo";
            nCombo.DisplayMember = "Descricao";



O Bind não funciona...
nCombo.DataBindings.Add("SelectedValue", objPessoa, "Descricao");

Estou fazendo alguma coisa de errado ?




Resposta escolhida #479664 - 17/02/2018 00:45:40

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


Membro da equipe
O binding é para o objeto editado, o datasource. Para simplesmente colocar os valores no combo, passe a "listaPessoas" para o DataSource.

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#479665 - 17/02/2018 00:55:24

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Me explica uma coisa, existe a possibilidade de ficar two way binding, quando eu editar no meu objeto refletir no controle e vice versa ?

pq eu fiz testes aqui, mas não funciona, quando eu modifico o objeto, não reflete no controle, não sei o que posso está fazendo de errado



#479666 - 17/02/2018 01:04:32

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


Membro da equipe
Você precisa usar o overload especificando o UpdateMode:

txtNome.DataBindings.Add("Text", objPessoa,
            "Descricao", false, DataSourceUpdateMode.OnPropertyChanged);

Por causa disso, você precisa implementar a interface INotifyPropertyChanged:

public class Foo : INotifyPropertyChanged
{
    private string _bar;
    get { return _bar; }
    set
    {
        _bar = value;
        OnPropertyChanged();
    }
    private void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}


_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#479667 - 17/02/2018 01:06:59

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 17/02/2018 01:10:02 por CLEVERTON

Eu acabei de testar num projeto de teste novo e funcionou normal

            BindingList<Teste> lista = new BindingList<Teste>();
            lista.Add(new Teste() { Id = 1, Name = "GOL" });
            lista.Add(new Teste() { Id = 2, Name = "FUSCA" });
            lista.Add(new Teste() { Id = 3, Name = "POLO" });
            lista.Add(new Teste() { Id = 4, Name = "FERRARI" });
            InitializeComponent();

            var teste = new Teste();
            textBox1.DataBindings.Add("Text", teste, "Id");

            comboBox1.DataSource = lista;
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "Id";

            comboBox1.DataBindings.Add("SelectedValue", teste, "Id", true, DataSourceUpdateMode.OnValidation);
         teste.Id = 3;

    public class Teste
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }





#479668 - 17/02/2018 01:07:26

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Eu vou testar aqui KERPLUNK  implementando INotifyPropertyChanged e dou um retorno. Obrigado desde já pela atenção.



#479669 - 17/02/2018 01:26:21

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Vamos lá.

Eu estava setando meu Source=null

           teste = null;
            teste = new Teste();
            teste.Id = 2;


Ai o binding não funcionava mais, tive de limpar, e depois atribuir dessa forma:

            teste = null;
            teste = new Teste();
            teste.Id = 2;

            textBox1.DataBindings.Clear();
            textBox1.DataBindings.Add("Text", teste, "Id");

            comboBox1.DataBindings.Clear();
            comboBox1.DataBindings.Add("SelectedValue", teste, "Id", true, DataSourceUpdateMode.OnValidation);


Dessa forma funcionou direitinho, muito obrigado pela atenção KERPLUNK



#479670 - 17/02/2018 01:27:01

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


Membro da equipe
Beleza então!

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#479671 - 17/02/2018 01:28:00

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Ei, vc que manja, tem alguma observação a fazer, ou isso é um comportamento anormal ?



#479672 - 17/02/2018 01:37:47

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


Membro da equipe
Quando você "limpa" o DataBinding e estabelece de novo a conexão(bind), você está atualizando o vínculo. Simplesmente "limpar" a fonte de dados, não necessariamente afeta o controle que à ela está conectado.

_______________________________________________________________________
Virei Oráculo!
The end is nigh, be ready for the nukes!


#479673 - 17/02/2018 01:47:51

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 17/02/2018 01:48:52 por CLEVERTON

 Anexos estao visíveis somente para usuários registrados

Então vc está me dizendo que se eu limpar a fonte de dados, teoricamente os controles não são afetados, é pra continuar funcionando normalmente ?


Se possível olha esse projeto em anexo ( 10 KB )
E veja um trecho do código que comentei.

Quando eu limpo a fonte de dados, se eu não refazer o bind clear e add, simplesmente não funciona




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


Tópico encerrado, respostas não sao permitidas
Encerrado por CLEVERTON em 19/02/2018 23:28:15