2009-11-02 8 views
5

Ich habe ein Wörterbuch Artikel wie untenEin Dictionary an die DataGridView in C# binden?

Dictionary<string, List<StrikePrice>> 

wo

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

und ich wünsche dieses Wörterbuch zu den DataGridView

this.dataGridViewTest.DataSource = listSmiles; 

Ich verstehe zuweisen, dass ein Wörterbuch nicht sein kann zugewiesen an die DataSource, da dies nicht von der IList Schnittstelle abgeleitet ist.

Gibt es eine Möglichkeit, dieses Dictionary-Element dem Datagrid zuzuordnen?

+0

WPF oder WinForms? –

+0

@Cameron: WinForms – tush1r

Antwort

3

Aufruf weiß ich, das ist ein bisschen alt, aber vielleicht wird es jemand helfen. Diese One-Line-Lösung arbeitete für mich

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

gridTAV ist ein DataGridView. dTAV ist ein Wörterbuch. Der Schlüssel ist ein Datum (nicht wichtig) und der Wert ist eine Klasse.

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

Da der Wert eine Klasse war die „ToArray()“ Methode nicht für mich arbeiten, da es nicht die Klasseneigenschaften „entpacken“.

Beachten Sie, dass dies den Schlüssel nicht in das Raster platziert, aber ich brauchte das nicht wirklich.

+0

Um die Sortierung usw. zu aktivieren, können Sie die Liste auch in eine Datentabelle konvertieren und diese stattdessen binden. Schauen Sie hier http://StackOverflow.com/questions/554366/convert-Generic-list-enumerable-To-Datatable für den Code. – pStan

-1

Wenn die Frage WPF oder silverlight betrifft, gibt article eine Lösung.

Ich habe es verwendet und es funktioniert gut, auch für eine große Anzahl von Spalten.

+0

@Phillip: Dies ist für Winforms-Anwendung. – tush1r

2

Haben Sie versucht, die Values-Eigenschaft des Dictionary zu verwenden?

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

@Kane: Ich habe versucht, dies zu tun, aber das hat nicht funktioniert. – tush1r

2

Ja, durch ToArray von Wörterbuch

 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(); 
Verwandte Themen