2009-11-02 38 views
5

Tôi có một mục từ điển như sauRàng buộc một từ điển vào DataGridView trong C#?

Dictionary<string, List<StrikePrice>> 

nơi

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

và tôi muốn gán từ điển này đến DataGridView

this.dataGridViewTest.DataSource = listSmiles; 

Tôi hiểu rằng một cuốn từ điển không thể được gán cho DataSource vì điều này không xuất phát từ giao diện IList.

Có cách nào để tôi có thể gán phần tử từ điển này cho DataGrid không?

+0

WPF hoặc WinForms? –

+0

@Cameron: WinForms – tush1r

Trả lời

3

Tôi biết đây là một chút cũ, nhưng có lẽ nó sẽ giúp một ai đó. Giải pháp một dòng này đã hoạt động cho tôi

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

gridTAV là một DataGridView. dTAV là một từ điển. Khóa là một ngày (không quan trọng), và giá trị là một lớp.

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

Kể từ khi giá trị là một lớp "ToArray()" phương pháp không làm việc cho tôi, vì nó không "giải nén" các thuộc tính lớp.

Lưu ý rằng điều này không đặt KEY trong lưới, nhưng tôi không thực sự cần điều đó.

+0

Ngoài ra, để bật tính năng sắp xếp, v.v. bạn có thể chuyển đổi danh sách thành một mục có thể định cấu hình và liên kết để thay thế. Xem tại đây http://stackoverflow.com/questions/564366/convert-generic-list-enumerable-to-datatable cho mã. – pStan

-1

Nếu câu hỏi liên quan đến WPF hoặc silverlight, thì article sẽ đưa ra giải pháp.

Tôi đã sử dụng và nó hoạt động tốt, ngay cả đối với số lượng lớn các cột.

+0

@Phillip: Điều này dành cho ứng dụng Winforms. – tush1r

2

Bạn đã thử sử dụng thuộc tính Giá trị của Từ điển chưa?

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

@Kane: Tôi đã thử làm điều này, tuy nhiên điều này không hiệu quả. – tush1r

2

Vâng, bởi Calling ToArray của từ điển

 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(); 
Các vấn đề liên quan