You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows窗体中将Dictionary<int, Account>数据显示到DataGridView?

把Dictionary<int, Account>数据显示到WinForms DataGridView的方法

嘿,这事儿其实挺简单的,我给你分享两种常用的实现方式,你可以根据自己的需求选:

方法1:直接绑定数据源(推荐,代码简洁)

DataGridView支持绑定实现了IEnumerable的集合,我们可以把Dictionary里的键值对转成包含所有需要字段的集合,直接设置为数据源就行。不过要注意,Account类的属性得是public的,不然DataGridView读不到。

步骤:

  1. 先确保Account类的属性是公开可访问的:
public class Account
{
    public string AccountName { get; set; }
    public decimal Balance { get; set; }
    public decimal MinBalance { get; set; }
}
  1. 转换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:21:07