c# - 绑定(bind)到字典的 DataGridView

标签 c# .net winforms datagridview dictionary

我有一个 Dictionary包含项目和价格。这些项目是唯一的,但会在应用程序的整个生命周期中慢慢添加和更新(也就是说,我事先不知道项目字符串)。我想将此结构绑定(bind)到 DataGridView,这样我就可以在我的表单上显示更新,例如:

Dictionary<string, double> _priceData = new Dictionary<string, double>();
BindingSource _bindingSource = new BindingSource();
dataGridView1.DataSource = _bindingSource;
_bindingSource.DataSource = _priceData;

但不能,因为 Dictionary未实现 IList (或 IListSourceIBindingListIBindingListView )。

有没有办法做到这一点?我需要保留一个唯一的项目列表,但还要更新现有项目的价格,所以 Dictionary是我认为的理想数据结构,但我找不到在表单上显示数据的方法。

更新:

Marc 下面的建议效果很好,但我仍然不确定如何在执行期间更新 DataGridView。

我有一个类级变量:
private DictionaryBindingList<string, decimal> bList; 

然后在 Main() 中实例化它:
bList = new DictionaryBindingList<string,decimal>(prices); 
dgv.DataSource = bList; 

然后在程序执行期间,如果将新条目添加到字典中:
prices.Add("foobar", 234.56M); bList.ResetBindings(); 

我认为这会刷新 DataGridView。为什么不?

最佳答案

或者,在 LINQ 中,它又好又快:

var _priceDataArray = from row in _priceData select new { Item = row.Key, Price = row.Value };

这应该可以绑定(bind)到“项目”和“价格”列。

要将其用作 GridView 中的数据源,您只需在后面加上 ToArray() .
dataGridView1.DataSource = _priceDataArray.ToArray();

关于c# - 绑定(bind)到字典的 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15246131/

相关文章:

c# - 使用 Neo4j .Net 驱动程序的结果

.net - 32 位和 64 位系统上的 P/Invoke

c# - 从动态程序集/模块中删除类

c# - 关闭窗体不会释放内存

如果单击鼠标按钮,C# mouseleave 和 mouseenter 事件不会触发

c# - 通过“转义 cmd\p4v 不会删除\in c#

c# - 哪个是更好的选择? - 在 Web 控件的 Viewstate 中的局部变量或存储变量

c# - 如何使用 C# 和 SQL 将表值参数传递给用户定义的数据表

c# - 来自 Vector3 的 eulerAngles 导致奇怪的旋转

c# - 如何在图像按钮中将背景图像设置为无或其他默认值?