WinForms, BindingSource, evitar a mudança CurrentItem
-
05-07-2019 - |
Pergunta
Como posso evitar item de BindingSource atual de mudar? (Não há nenhuma mudança evento com cancelar argumento ...)
Este é cenário:
- Eu tenho um DataGridView, e caixas de texto no mesmo formulário.
- Eu estou usando caixas de texto para alterar os valores na fonte de dados (com ligação de dados padrão)
-
Ligações são escritos manualmente (Após salvar botão é clicado)
-
Quando o usuário seleciona outra linha usando DataGridView, bindingSource.Current propery é alterado, e caixas de texto são atualizados com os valores da linha selecionada. Alterações que o usuário inseriu são perdidas.
Existe alguma maneira de evitar esse problema?
posso evitar bindingSource.Current propriedade de mudar?
Existe alguma opção melhor para evitar este comportamento?
(incapacitante dataGridView não é unfortinutelly uma opção)
Solução
Parece que você não quer não a mudança bindingSource.Current
, mas sim que você deseja salvar o conteúdo das caixas de texto antes de alterar a linha atual? Se você obrigado a coleção não ao bindingSource
, em seguida, fazer as caixas de texto referem-se a propriedades no elemento atual em que a coleta?
Eu não sou realmente certo o que você está tentando fazer, mas um tiro no escuro poderia ser a de vincular a mesma DataSource
a dois objetos BindingSource
diferentes, algo como isto:
gridBindingSource.DataSource = theDataSource;
textBoxBindingSource.DataSource = theDataSource;
myDataGrid.DataSource = gridBindingSource;
firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName"));
mas isso seria estranho, porque se theDataSource
é apropriado para um controle de grade, então é uma coleção de coisas que têm uma propriedade FirstName
. Talvez se você fosse mais específico na sua pergunta.
ETA:. Se você quiser salvar o conteúdo da caixa de texto para a linha atual, ValidateChildren ()
chamada no recipiente antes de as alterações de propriedade bindingSource.Current
Outras dicas
Eu tenho um quadro um pouco semelhante com ambos grade e caixas de texto na mesma forma. Quando o usuário clica no botão Editar (ou adicionar), eu simplesmente desativar o próprio ...
controle gridviewMyDataGrid.Enabled = false;
continuar a editar ..
Em seguida, no SAVE, se tudo estiver ok,
MyDataGrid.Enabled = true;