Alterando a seleção de caixa de listagem não está se movendo muda de BindingSource para DataSet

StackOverflow https://stackoverflow.com/questions/609052

Pergunta

A resposta a esta questão pode vir a ser, "Não usar DataSets digitados sem usar o Navigator Binding." Estou curioso, no entanto, sobre o comportamento que eu estou vendo.

Então, eu criei um formulário onde cada controle foi arrastado a partir do gerenciador fontes de dados. Eu apaguei o Navigator Encadernação porque é feio e inadequados para esta forma particular. Eu adicionei uma caixa de listagem e definir o DataSource a BindingSource.
Observe que a caixa de listagem não está vinculado, é apenas encher-se do BindingSource. Por alguma magia que eu não estava contando, movendo-se na caixa de listagem está navegando o BindingSource e todos os outros controles estão atualizando em conformidade.

Posso fazer alterações nos controles acoplados e EndEdit explicitamente chamada no BindingSource e, em seguida, atualizar a fonte de dados por meio do adaptador de tabela. Funciona muito bem.

Quando faço alterações nos controles acoplados e clique uma nova opção na caixa de listagem, eu quero ser capaz de verificar as alterações e solicitação para salvar ou redefinir, se houver algum.

Aqui está a parte estranha que eu não tenho sido capaz de descobrir.

Não importa o evento que eu anexar, DataSet.HasChanges não retorna verdadeiro até a segunda mudança de caixa de listagem. Eu procurei e dezenas de sugestões tentou, a maioria deles ridículo, mas alguns que parecia promissor. Sem sorte.

Edit:. Não é o segundo clique que é significativo, é quando você clicar novamente no item original (editado)

Foi útil?

Solução

Uma vez que a pergunta, eu aprendi um pouco mais sobre BindingSources, conjuntos de dados e TableAdapters.

Aqui está o que funciona:

    private void MyListBox_Click(object sender, EventArgs e)
    {
        this.myBindingSource.EndEdit();
        if (myDataSet.HasChanges())
        {
            if (MessageBox.Show("Save changes?", "Before moving on", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                myTableAdapter.Update(myDataSet.myDataTable);
            }
            else
            {
                myDataSet.RejectChanges();
            }
        }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top