Skip to main content
 首页 » 编程设计

C# 教程之将 DataGridView 绑定(bind)到包含对象的集合

2024年02月24日32freeliver54

所以我有一个数据 GridView 。

通常我可以创建对象的绑定(bind)列表,它会正确显示所有数据和列

例如

BindingList<Customer> CustomerList = new BindingList<Customer>(); 
myDataGridView.DataSource = CustomerList; 

并且它将为 Customer 中具有 getter 的每个属性显示一列。 它还将为每个对象显示一行。

完美的结果。

现在在我当前的场景中,我有这些对象:

public class Reservedele 
{ 
    public int Rnr { get; private set;} 
    public string Navn { get; private set;} 
    public double Pris { get; private set;} 
    public string Type { get; private set;} 
 
    public Reservedele(int rnr, string navn, double pris, string type) 
    { 
        Rnr = rnr; 
        Navn = navn; 
        Pris = pris; 
        Type = type; 
    } 
} 
public class IndkøbsKurvReservedele 
{ 
    public Reservedele Reservedel  { get; private set;} 
    public int Antal { get; private set; } 
    public double Pris { get; private set; } 
 
    public IndkøbsKurvReservedele(Reservedele reservedel, int antal, double pris) 
    { 
        Reservedel = reservedel; 
        Antal = antal; 
        Pris = pris; 
    } 
} 

如果我这样做:

BindingList<IndkøbsKurvReservedele> ReserveDeleListeIndKøbsKurv = new BindingList<IndkøbsKurvReservedele>(); 
myDataGridView.DataSource = ReserveDeleListeIndKøbsKurv; 

它不会工作:( 错误是datagridview显示:

  • 对象本身
  • 安塔尔
  • 校长

例子:

我如何指示 datagridview 我希望它具有 Reservedel 中的属性,后跟 IndkøbsKurvReservedele 中的属性作为 header ?

作为引用,Reservedel 的意思是“备件”,IndkøbsKurvReservedel 的意思类似于“ShoppingBasketOfSpareParts”。 Antal 的意思是“数量”,意思是有多少。 抱歉,外部变量命名。

编辑:我还有一个问题:如何使 Rnr 属性不显示为列?

请您参考如下方法:

从技术上讲你不能,数据源不绑定(bind)任何嵌套属性。

但您始终可以通过在父对象中公开子对象的属性来解决此问题。