Ho una classeLista Binding <T> di DataGridView in WinForm
class Person{
public string Name {get; set;}
public string Surname {get; set;}
}
e un List<Person>
a cui aggiungere alcuni elementi. L'elenco è associato al mio DataGridView
.
List<Person> persons = new List<Person>();
persons.Add(new Person(){Name="Joe", Surname="Black"});
persons.Add(new Person(){Name="Misha", Surname="Kozlov"});
myGrid.DataSource = persons;
Nessun problema. myGrid
visualizza due righe, ma quando aggiungo nuovi elementi all'elenco persons
, myGrid
non mostra il nuovo elenco aggiornato. Mostra solo le due righe che ho aggiunto prima.
Quindi qual è il problema?
Il riavvolgimento ogni volta funziona bene. Ma quando lego un DataTable
alla griglia ogni volta che apporto alcune modifiche a DataTable
, non è necessario ReBind myGrid
.
Come risolverlo senza ripetere ogni volta?
Si dice che è possibile utilizzare IList e altre interfacce anche: http://msdn.microsoft.com/en-us/library/system .windows.forms.datagridview.datasource.aspx – Pacane
@Pacane: Certo che puoi, ma DataGridView deve sapere se la tua origine dati ha delle modifiche. 'Uno' modo ist per utilizzare un BindingList, che genererà un evento se l'elenco sottostante cambia. Un altro modo è usare un 'BindingSource' e chiamare ResetBinding() ogni volta che si aggiunge/cancella una riga, ma questo è un modo per lavorare di più. Se si desidera informare la griglia sulle modifiche alle proprietà, il modo più semplice è implementare 'INotifyPropertyChanged' –
perché si è utilizzato BindingList e BindingSource perché è possibile associare direttamente l'elenco alla proprietà dell'origine dati datagridview.discutere l'importanza di BindingList e BindingSource utilizzati qui. grazie – Mou