Tengo un Dictionary
que contiene elementos y precios. Los elementos son únicos, pero se agregan y actualizan lentamente a lo largo de la vida útil de la aplicación (es decir, no conozco las cadenas de elementos de antemano). Me gustaría enlazar esta estructura a un DataGridView, por lo que puede mostrar cambios en mi forma, algo así como:DataGridView vinculado a un diccionario
Dictionary<string, double> _priceData = new Dictionary<string, double>();
BindingSource _bindingSource = new BindingSource();
dataGridView1.DataSource = _bindingSource;
_bindingSource.DataSource = _priceData;
pero no puede, desde Dictionary
no implementa IList
(o IListSource
, IBindingList
, o IBindingListView
).
¿Hay alguna manera de lograrlo? Necesito mantener una lista única de artículos, pero también actualizar el precio de un artículo existente, por lo que creo que una estructura de datos ideal es Dictionary
, pero no puedo encontrar una manera de mostrar los datos en mi Formulario.
Actualización: sugerencia
de Marc siguiente funciona muy bien, pero todavía no estoy seguro de cómo actualizar el DataGridView durante la ejecución.
que tienen una variable de nivel de clase:
private DictionaryBindingList<string, decimal> bList;
Entonces instanciar que en Main()
:
bList = new DictionaryBindingList<string,decimal>(prices);
dgv.DataSource = bList;
Luego, durante la ejecución del programa si hay una nueva entrada se agrega al diccionario:
prices.Add("foobar", 234.56M); bList.ResetBindings();
Pensé que refrescaría DataGridView. Por qué no?
como un lado - para "precio" normalmente debería usar decimal, no doble –
Actualizado su comentario; a menos que subclasifiquemos el diccionario <,>, no hay una manera simple de saber que ha agregado un elemento; en lugar de esto, he agregado un método Reset() (con uso de ejemplo) que rellena la lista. Vea el botón en la parte inferior del formulario para ver un ejemplo. –