2009-11-02 34 views
5

que tienen un elemento de diccionario de la siguiente manera¿Enlazar un diccionario al DataGridView en C#?

Dictionary<string, List<StrikePrice>> 

donde

public class StrikePrice 
{ 
    public string Strike { get; private set; } 
    public string Price { get; private set; } 

    public StrikePrice(string strike, string price) 
    { 
     Strike = strike; 
     Price = price; 
    } 
} 

y que desea asignar este diccionario a la DataGridView

this.dataGridViewTest.DataSource = listSmiles; 

entiendo que un diccionario no puede ser asignado al DataSource ya que esto no se deriva de la interfaz IList.

¿Hay alguna manera de asignar este elemento de diccionario a la cuadrícula de datos?

+0

WPF o WinForms? –

+0

@Cameron: WinForms – tush1r

Respuesta

3

Sé que esto es un poco viejo, pero quizás ayude a alguien. Esta solución de una sola línea funcionó para mí

gridTAV.DataSource = dTAV.Values.ToList<TotalAccountValue>(); 

gridTAV es un DataGridView. dTAV es un diccionario. La clave es una fecha (no importante) y el valor es una clase.

Dictionary<DateTime, TotalAccountValue> dTAV = new Dictionary<DateTime, TotalAccountValue>(); 

Dado que el valor era una clase el método "ToArray()" no funcionó para mí, ya que no "descomprimir" las propiedades de clase.

Tenga en cuenta que esto no coloca la LLAVE en la cuadrícula, pero realmente no la necesitaba.

+0

Además, para habilitar la clasificación, etc., puede convertir la lista en una tabla de datos y vincularla en su lugar. Mire aquí http://stackoverflow.com/questions/564366/convert-generic-list-enumerable-to-datatable para el código. – pStan

-1

Si la pregunta se refiere a WPF o silverlight, este article da una solución.

Lo he estado usando y funciona bien, incluso para grandes cantidades de columnas.

+0

@Phillip: Esto es para la aplicación Winforms. – tush1r

2

¿Ha intentado utilizar la propiedad Valores del diccionario?

this.dataGridViewTest.DataSource = listSmiles.Values.ToList(); 
+0

@Kane: Intenté hacer esto, sin embargo, esto no funcionó. – tush1r

2

Sí, por Calling ToArray del diccionario

 var g = this.dataGridView1; 
     var s = new Dictionary<string, string>(); 
     s.Add("1", "Test1"); 
     s.Add("2", "Test2"); 
     s.Add("3", "Test3"); 
     g.DataSource = s.ToArray();