Atualização de BindingSource no WinForms não atualiza a coleção de fonte de dados
Quero exibir uma coleção personalizada em umDataGridView
em um aplicativo do Windows Forms. Esta coleção customizada implementaICollection
eIEnumerable
. Eu configurei umBindingSource
, usando a coleção como a propriedade .DataSource. oDataGridView
está definido para usar o meuBindingSource
como é DataSource. Quando adiciono um novo item à coleção usando oBindingSource.Add()
método, oDataGridView
atualiza corretamente com o novo item. oBindingSource
DataSource, por outro lado, não:
MyCustomCollection myCollection = new MyCustomCollection();
myCollection.Add(myCustomObject1);
myCollection.Add(myCustomObject2);
myBindingSource.DataSource(myCollection);
myBindingSource.Add(myCustomObject3);
No código acima, a Lista interna do myBindingSource contém o número correto de registros (3), e oDataGridView
também contém três registros, mas myCollection contém apenas dois registros. Eu sei que mudar o myCollection subjacente NÃO atualizará oBindingSource
ou oDataGridView
, como não é umBindingList<T>
, mas fiquei com a impressão de que atualizar umBindingSource
diretamente garantiria que myCollection fosse atualizado ao mesmo tempo.
Existe uma maneira de usar uma coleção que não é umBindingList<T>
e atualizá-lo ao interagir com oBindingSource
diretamente?
AtualizarUma forma de obter os dados atualizados em todas as partes (Coleção, BindingSource, DataGridView) é a seguinte:
myCollection.Add(myCustomObject3);
myBindingSource.DataSource = null;
myBindingSource.DataSource = myCollection;
Tenho certeza de que há uma maneira melhor de atacar esse problema, mas esse é o único método que gerou os resultados que eu esperava.