Tôi có một Dictionary
có chứa các mặt hàng và giá cả. Các mục này là duy nhất nhưng từ từ được thêm vào và cập nhật thông qua toàn bộ thời gian của ứng dụng (tức là, tôi không biết các chuỗi mục trước). Tôi muốn để ràng buộc cấu trúc này cho một DataGridView, vì vậy tôi có thể hiển thị các cập nhật về Mẫu của tôi, một cái gì đó như:DataGridView ràng buộc với một từ điển
Dictionary<string, double> _priceData = new Dictionary<string, double>();
BindingSource _bindingSource = new BindingSource();
dataGridView1.DataSource = _bindingSource;
_bindingSource.DataSource = _priceData;
Nhưng không thể, kể từ Dictionary
không thực hiện IList
(hoặc IListSource
, IBindingList
, hoặc IBindingListView
).
Có cách nào để đạt được điều này không? Tôi cần giữ một danh sách các mục duy nhất, nhưng cũng cập nhật giá cho một mục hiện có, do đó, Dictionary
là cấu trúc dữ liệu lý tưởng mà tôi nghĩ, nhưng tôi không thể tìm cách hiển thị dữ liệu trên Biểu mẫu của mình.
Cập nhật:
Marc gợi ý dưới đây hoạt động rất độc đáo, nhưng tôi vẫn không chắc chắn làm thế nào để cập nhật DataGridView trong khi thực hiện.
Tôi có một biến lớp cấp:
private DictionaryBindingList<string, decimal> bList;
Sau đó nhanh chóng rằng trong Main()
:
bList = new DictionaryBindingList<string,decimal>(prices);
dgv.DataSource = bList;
Sau đó, trong quá trình thực hiện chương trình nếu một mục mới được thêm vào từ điển:
prices.Add("foobar", 234.56M); bList.ResetBindings();
Tôi nghĩ rằng sẽ làm mới DataGridView. Tại sao không?
như một sang một bên - cho "giá", bạn thường nên sử dụng số thập phân, chứ không phải gấp đôi –
Cập nhật lại nhận xét của bạn; trừ khi chúng tôi phân loại từ điển <,>, không có cách nào đơn giản để biết rằng bạn đã thêm một mục; thay vì điều này, tôi đã thêm phương thức Reset() (sử dụng ví dụ) để điền lại danh sách. Xem nút ở dưới cùng của biểu mẫu để biết ví dụ. –