私はオブジェクトのリストを返すビジネスオブジェクトを持っています。このリストは、winform上のdatagridviewのデータソースとして使用されます。リストを読み込み、データソースに設定し、更新して表示します。列の1つが存在しますが、値はありません。ヘッダーは表示されますが、データは表示されません。列は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"
},
};
}
}
そして、ここでトラックをロードするために私形式のコードです:https://pastebin.com/6adxiEnU:
public void InitTrucks()
{
TruckColor truck = new TruckColor();
var trucks = truck.GetAll();
if (trucks.Count() > 0)
{
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = trucks;
dataGridView1.Refresh();
}
}
を試してみてください –
Perdoの例を使用した後、私は予想されるものとは非常に異なる何かをしていることに気付きました。変更を加えるために私のコード例を少し修正しました。基本的に "GetAll"メソッドは、共通の関数を共有するので、派生クラスではなく、基本クラスで実装されます。 var trucks = truck.GetAll()はトラックオブジェクトのリストを返し、TruckColorIdがコレクション内にあることがわかります。 DataGridViewにはこれが含まれていません。私はそれがトラックではなくEditBaseとして扱われているからだと思うだけです。 – Buffy