2009-11-02 15 views
5

Mam słownika przedmiot jak poniżejPowiązanie słownika z DataGridView w języku C#?

Dictionary<string, List<StrikePrice>> 

gdzie

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; 
    } 
} 

i życzę, aby przypisać ten słownik do DataGridView

this.dataGridViewTest.DataSource = listSmiles; 

Rozumiem, że słownik nie może być przypisany do DataSource, ponieważ nie wynika on z interfejsu IList.

Czy istnieje sposób, w jaki mogę przypisać ten element słownika do datagridu?

+0

WPF lub WinForms? –

+0

@Cameron: WinForms – tush1r

Odpowiedz

3

wiem, że to jest nieco stary, ale może to komuś pomóc. To jedno-liniowe rozwiązanie działało dla mnie, gridTAV jest DataGridView. dTAV to słownik. Klucz jest datą (nieważne), a wartość jest klasą.

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

Ponieważ wartość była Class „ToArray()” metoda nie działa dla mnie, ponieważ nie „rozpakować” właściwości klasy.

Należy zauważyć, że nie umieszcza to klucza w siatce, ale tak naprawdę nie potrzebowałem tego.

+0

Ponadto, aby włączyć sortowanie itp., Możesz przekonwertować listę na Datatable i powiązać ją. Zajrzyj tutaj http://stackoverflow.com/questions/564366/convert-generic-list-enumerable-to-datatable dla kodu. – pStan

-1

Jeśli pytanie dotyczy WPF lub silverlight, to article daje rozwiązanie.

Używam go i działa dobrze, nawet dla dużej liczby kolumn.

+0

@Phillip: To jest dla aplikacji WinForm. – tush1r

2

Czy próbowałeś użyć właściwości Values ​​w Słowniku?

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

@Kane: Próbowałem to zrobić, ale to nie zadziałało. – tush1r

2

Tak, przez Wywołanie ToArray słownika

 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(); 
Powiązane problemy