如何在Windows窗体中将Dictionary<int, Account>数据显示到DataGridView?
把Dictionary<int, Account>数据显示到WinForms DataGridView的方法
嘿,这事儿其实挺简单的,我给你分享两种常用的实现方式,你可以根据自己的需求选:
方法1:直接绑定数据源(推荐,代码简洁)
DataGridView支持绑定实现了IEnumerable的集合,我们可以把Dictionary里的键值对转成包含所有需要字段的集合,直接设置为数据源就行。不过要注意,Account类的属性得是public的,不然DataGridView读不到。
步骤:
- 先确保Account类的属性是公开可访问的:
public class Account { public string AccountName { get; set; } public decimal Balance { get; set; } public decimal MinBalance { get; set; } }
- 转换Dictionary并绑定:
我们可以用Linq把Dictionary的键(账号)和值(Account实例的属性)整合成匿名对象列表,这样能把所有需要的字段都包含进去:
// 引用System.Linq才能用Select方法 var accountDisplayList = acc.Select(kv => new { 账号 = kv.Key, 账号名称 = kv.Value.AccountName, 余额 = kv.Value.Balance, 最低余额 = kv.Value.MinBalance }).ToList(); // 绑定到DataGridView dataGridView1.DataSource = accountDisplayList;
如果想手动控制列的样式(比如列宽、标题文字),可以先关闭自动生成列,手动创建列并指定对应的数据字段:
// 关闭自动生成列 dataGridView1.AutoGenerateColumns = false; // 手动添加对应列 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "账号", DataPropertyName = "账号", Width = 100 }); dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "账号名称", DataPropertyName = "账号名称", Width = 150 }); dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "余额", DataPropertyName = "余额", Width = 120, DefaultCellStyle = { Format = "C2" } // 格式化货币显示 }); dataGridView1.Columns.Add(new DataGridViewTextBoxColumn { HeaderText = "最低余额", DataPropertyName = "最低余额", Width = 120, DefaultCellStyle = { Format = "C2" } }); // 最后绑定数据源 dataGridView1.DataSource = accountDisplayList;
方法2:手动遍历添加行(适合需要自定义处理每一行的场景)
如果需要在添加行的时候做额外逻辑(比如根据余额给行标色),可以手动遍历Dictionary的每个键值对,逐行添加到DataGridView:
// 先清空现有行,避免重复数据 dataGridView1.Rows.Clear(); // 遍历Dictionary里的每一组键值对 foreach (var kvp in acc) { // 按顺序添加一行数据:账号、账号名称、余额、最低余额 int rowIndex = dataGridView1.Rows.Add( kvp.Key, kvp.Value.AccountName, kvp.Value.Balance, kvp.Value.MinBalance ); // 自定义逻辑示例:余额低于最低余额时,行文字标红 if (kvp.Value.Balance < kvp.Value.MinBalance) { dataGridView1.Rows[rowIndex].DefaultCellStyle.ForeColor = Color.Red; } }
这种方法需要确保DataGridView已经提前创建好对应的四列(可以在设计器里添加,或者用代码创建)。
小提示:
- 如果在设计器里创建列,记得把每列的
DataPropertyName和绑定的字段名对应上(比如方法1里的匿名对象属性名)。 - 要是用.NET Framework,别忘记在代码顶部引用
using System.Linq;,不然用不了Select方法。
内容的提问来源于stack exchange,提问作者Vikas Shah
相关产品推荐
相关产品推荐

