2017-08-08 89 views
0

我有一個業務對象,返回一個對象列表。這個列表然後被用作winform上datagridview的數據源。我加載我的列表,將其設置爲數據源,刷新並查看。其中一列是存在的,但沒有任何價值。我看到標題但沒有數據。該列是用於TruckColorId的。 Id顯示正確的值。調試代碼我可以看到列表中的對象具有所有期望正確使用數據的屬性,包括正在討論的字段。datagrid列值不顯示c#winform

如果我選擇一行並執行所選行的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(); 
    } 
} 
+0

這個工作對我罰款:https://pastebin.com/6adxiEnU –

+0

在使用示例Perdo發佈之後,我意識到自己正在做一些與預期不同的事情。我已經修改了我的代碼示例以包含更改。基本上,「GetAll」方法在基類中實現,而不是在派生類中實現,因爲它共享通用函數。 var trucks = truck.GetAll()返回卡車對象的列表,我可以看到TruckColorId在集合中。 datagridView不包括這個。我只能假設它是因爲它把它當作EditBase而不是卡車 – Buffy

回答

0

試試這個

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(); 
} 
+0

太棒了!這使得列表顯示,因爲我希望顯示卡車列表。 – Buffy