Alterando a seleção de caixa de listagem não está se movendo muda de BindingSource para DataSet
-
03-07-2019 - |
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)
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();
}
}
}