【问题标题】:datagrid column value not displaying c# winformdatagrid列值不显示c#winform
【发布时间】:2017-08-08 15:45:31
【问题描述】:

我有一个返回对象列表的业务对象。然后,此列表将用作 winform 上 datagridview 的数据源。我加载我的列表,将其设置为数据源,刷新并查看。其中一列存在,但没有值。我看到标题但没有数据。该列用于 TruckColorId。 Id 显示正确的值。调试代码我可以看到列表中有对象具有我希望正确查看数据的所有属性,包括有问题的字段。

如果我选择一行并对所选行执行 foreach 循环,则所有列都有值,但 TruckColorId 除外。

public class TruckColor : EditBase 
{
   public int TruckColorId { get; set; }
   public override int Id
   {
    get { return TruckColorId; }
    set { TruckColorId = value; }
   }
}

public class EditBase
{
    public virtual int Id { get; set; }
    public string ShortCode { get; set; }        
    public string Description { get; set; }

    public IList<EditBase> GetAll()
    {
        return new List<EditBase>()
        {
            new TruckColor
            {
                Description = "abc",
                Id = 1,
                ShortCode = "A"
            },
            new TruckColor
            {
                Description = "abcd",
                Id = 2,
                ShortCode = "B"
            },
            new TruckColor
            {
                Description = "abcde",
                Id = 3,
                ShortCode = "C"
            },
        };
    }
  }

这是我的表单中加载卡车的代码:

public void InitTrucks()
{
    TruckColor truck = new TruckColor();

    var trucks = truck.GetAll();
    if (trucks.Count() > 0)
    {
        dataGridView1.AutoGenerateColumns = true;                
        dataGridView1.DataSource = trucks;
        dataGridView1.Refresh();
    }
}

【问题讨论】:

  • 这对我来说很好用:pastebin.com/6adxiEnU
  • 使用 Perdo 发布的示例后,我意识到我正在做的事情与预期的完全不同。我已经稍微修改了我的代码示例以包含更改。基本上,“GetAll”方法是在基类中实现的,而不是在派生类中实现的,因为它共享通用功能。 var trucks = truck.GetAll() 返回卡车对象的列表,我可以看到 TruckColorId 在集合中。 datagridView 不包括这个。我只能假设这是因为它将其视为 EditBase 而不是 Truck

标签: c# winforms datagridview


【解决方案1】:

试试这个

var trucks = truck.GetAll();
 if (trucks.Count() > 0)
{
    List<TruckColor> RealTrucks = trucks.Select(x=>(TruckColor)x).ToList();
    dataGridView1.AutoGenerateColumns = true;                
    dataGridView1.DataSource = RealTrucks;
    dataGridView1.Refresh();
}

【讨论】:

  • 太棒了!这使得列表可以像我期望的那样显示卡车列表。
猜你喜欢
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-21
  • 1970-01-01
  • 2018-11-24
  • 2013-06-16
  • 2013-03-23
相关资源
最近更新 更多