2009-11-02 4 views
5

У меня есть элемент словаря, как показано нижеПривязка словаря к DataGridView в C#?

Dictionary<string, List<StrikePrice>> 

где

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

, и я хочу, чтобы назначить этот словарь в DataGridView

this.dataGridViewTest.DataSource = listSmiles; 

Я понимаю, что словарь не может быть присвоенный DataSource, поскольку это не происходит из интерфейса IList.

Можно ли каким-либо образом присвоить этот элемент словаря datagrid?

+0

WPF или WinForms? –

+0

@Cameron: WinForms – tush1r

ответ

3

Я знаю, что это немного старый, но, возможно, это поможет кому-то. Это однострочное решение для меня работало

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

gridTAV - это DataGridView. dTAV - это словарь. Ключ - это дата (не важно), а значение - класс.

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

Поскольку значение было Класс «ToArray()» метод не работает для меня, так как это не «распаковать» свойства класса.

Обратите внимание, что это не помещает КЛЮЧ в сетку, но мне это действительно не нужно.

+0

Кроме того, чтобы включить сортировку и т. Д., Вы можете преобразовать список в Datatable и связать его. Посмотрите здесь http://stackoverflow.com/questions/564366/convert-generic-list-enumerable-to-datatable для кода. – pStan

-1

Если вопрос относится к WPF или silverlight, то это article дает решение.

Я использовал его, и он хорошо работает даже для большого количества столбцов.

+0

@Phillip: Это приложение Winforms. – tush1r

2

Вы пытались использовать свойство Значения Словаря?

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

@Kane: Я пробовал это делать, однако это не сработало. – tush1r

2

Да, Вызов ToArray из словаря

 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(); 
Смежные вопросы