Ho un Dictionary
che contiene articoli e prezzi. Gli articoli sono unici ma vengono lentamente aggiunti e aggiornati durante la vita dell'applicazione (ovvero, non conosco le stringhe dell'articolo in anticipo). Vorrei legare questa struttura ad un DataGridView, in modo da poter mostrare gli aggiornamenti sulla mia forma, qualcosa di simile:DataGridView associato a un dizionario
Dictionary<string, double> _priceData = new Dictionary<string, double>();
BindingSource _bindingSource = new BindingSource();
dataGridView1.DataSource = _bindingSource;
_bindingSource.DataSource = _priceData;
ma non può, in quanto Dictionary
non implementa IList
(o IListSource
, IBindingList
o IBindingListView
).
C'è un modo per raggiungere questo obiettivo? Devo mantenere un elenco univoco di articoli, ma anche aggiornare il prezzo per un articolo esistente, quindi una Dictionary
è la struttura dati ideale, ma non riesco a trovare un modo per visualizzare i dati sul mio modulo.
Aggiornamento: suggerimento
di Marc sotto funziona molto bene, ma non sono ancora sicuro di come aggiornare il DataGridView durante l'esecuzione.
Ho una variabile a livello di classe:
private DictionaryBindingList<string, decimal> bList;
Poi istanziare che nel Main()
:
bList = new DictionaryBindingList<string,decimal>(prices);
dgv.DataSource = bList;
Poi, durante l'esecuzione del programma, se una nuova voce si aggiunge al dizionario:
prices.Add("foobar", 234.56M); bList.ResetBindings();
Ho pensato che avrebbe aggiornato il DataGridView. Perchè no?
come una parte - per "prezzo" si dovrebbe normalmente utilizzare decimale, non doppio –
Aggiornato re il tuo commento; a meno che non ci sottoclassi il dizionario <,>, non esiste un modo semplice per sapere che hai aggiunto un elemento; piuttosto che questo, ho aggiunto un metodo Reset() (con l'uso di esempio) che ri-popola la lista. Vedere il pulsante nella parte inferiore del modulo per un esempio. –