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

绑定List<T>后DataGridView单元格为空,如何解决?

解决List绑定DataGridView后单元格显示NULL的问题

问题核心原因:DataGridView数据绑定默认仅识别属性(Property),你定义的LogEntry类中,TimeStamp和Message是公共字段(Field)而非属性,导致网格无法读取这些值,最终单元格显示NULL。

解决方法:

将LogEntry类中的字段改为带get/set访问器的属性:

public partial class MainForm : Form
{
    private class LogEntry
    {
        // 改为属性,添加get/set访问器
        public DateTime TimeStamp { get; set; }
        public string Message { get; set; }
    }

    List<LogEntry> _logEntries = new List<LogEntry>();

    // 修正原代码拼写错误:EentArgs → EventArgs
    private void MainForm_Load(object sender, EventArgs e)
    {
        grid1.DataSource = _logEntries;
    }

    public void AddCommItem(string msg)
    {
        _logEntries.Add(new LogEntry { TimeStamp = DateTime.Now, Message = msg });
        // List<T>不支持自动通知数据变化,添加后需手动刷新网格
        grid1.Refresh();
        
        // 若要实现自动刷新,建议改用BindingSource:
        // 先声明成员:private BindingSource _bindingSource = new BindingSource();
        // 在MainForm_Load中:_bindingSource.DataSource = _logEntries; grid1.DataSource = _bindingSource;
        // 添加数据时:_bindingSource.Add(new LogEntry { TimeStamp = DateTime.Now, Message = msg });
        // 此方式无需手动调用Refresh
    }
}

额外提示:

  1. 原代码中EentArgs属于拼写错误,需修正为EventArgs才能正常编译。
  2. 若需要添加数据后网格自动更新,优先使用BindingSource作为数据绑定中间层——因为List<T>未实现INotifyCollectionChanged接口,无法主动通知网格数据变更,而BindingSource内置了该接口的实现。

内容的提问来源于stack exchange,提问作者Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:40:59