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

Winform DataGridView数据绑定失效:数据不显示问题求助

解决Winform DataGridView数据绑定失效的问题

我一眼就瞅到你这问题的核心了——Winform的数据绑定只认公共属性,不认字段,咱们一步步捋清楚:

问题根源

你的NeaktivniPartner类里定义的都是公共字段(比如public int ppid;),但Winform的自动列生成、TypeDescriptor.GetProperties这些数据绑定相关的机制,只会识别带get/set的公共属性(Property),不会理字段(Field)。这就导致:

  • 直接绑定泛型列表时,DataGridView找不到要显示的列
  • 调用ConvertToDataTable时,获取到的属性集合是空的,生成的DataTable没有列,自然显示不出内容

解决方案

把字段改成属性就搞定了,顺便给你优化下绑定代码:

1. 修改NeaktivniPartner类

把字段改成标准的公共属性,这是最关键的一步:

public class NeaktivniPartner
{
    public int Ppid { get; set; }
    public string Naziv { get; set; }
    public double DanaBezKupovine { get; set; }
}

(首字母大写是C#编码规范,你也可以保持和原字段同名,但必须是属性形式)

2. 优化数据绑定逻辑

设置DataSource后不需要手动调用Refresh(),Winform会自动刷新UI。另外直接用BindingList<T>绑定泛型列表会更灵活(后续数据变更还能自动通知UI):

private void button1_Click(object sender, EventArgs e)
{
    neaktivniPartneri.Clear(); // 每次点击先清空旧数据,避免重复添加
    foreach(Int_String partner in partneri)
    {
        double danaBezProdaje = (DateTime.Today - Komercijalno.Partner.PoslednjaKupovina(partner._int)).TotalDays;
        if ( danaBezProdaje > 31)
        {
            NeaktivniPartner np = new NeaktivniPartner();
            np.Ppid = partner._int;
            np.Naziv = partner._string;
            np.DanaBezKupovine = danaBezProdaje;
            neaktivniPartneri.Add(np);
        }
    }
    // 两种绑定方式选其一即可
    // 方式1:直接绑定BindingList(推荐)
    dataGridView1.DataSource = new BindingList<NeaktivniPartner>(neaktivniPartneri);
    // 方式2:转DataTable(现在属性正确了,ConvertToDataTable也能生成正常的列)
    // dataGridView1.DataSource = M.List.ConvertToDataTable(neaktivniPartneri);
}

3. 验证ConvertToDataTable的有效性

现在NeaktivniPartner是属性了,TypeDescriptor.GetProperties(typeof(T))就能正确获取到属性集合,生成的DataTable会包含3列,绑定后就能正常显示数据了。

额外小提示

你之前试的删除DataGridView、重启VS都是无用功,不过可以再确认下:

  • 确保dataGridView1.AutoGenerateColumns确实是true(你构造函数里已经设置了,没问题)
  • 调试时可以看生成的DataTable的Columns.Count,之前应该是0,修改属性后会变成3,这就说明问题解决了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:57:55