C#教程 - 将DataGridView绑定到包含对象的Collection

时间:2009-12-03 17:26:16

标签: c# data-binding

所以我有一个datagridview。

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

E.g

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显示:

  • 对象本身
  • 安塔尔
  • 的PRI

实施例: alt text

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

作为参考,Reservedel表示“备件”,IndkøbsKurvReservedel表示“ShoppingBasketOfSpareParts”。 Antal意味着“数量”与数量有关。 对不起外来变量命名。

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

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您还可以覆盖Reservedele类的ToString()方法以显示您想要的任何内容(默认情况下,DataGridView将调用ToString()方法来获取单元格内容。)

答案 2 :(得分:1)

您可以随时使用LINQ并执行以下操作:

var bindMe =
            from r in ReserveDeleListeIndKøbsKurv
            select new
            {
                navn = r.Reservedel.Navn,
        pris = r.Reservedel.Pris,
        type = r.Reservedel.Type,
        antal = r.Antal,
        anotherPris = r.Pris
            };
  

myDataGridView.DataSource = bindMe;

答案 3 :(得分:0)

除非您继承该类或将所有这些数据包装到某种数据集中,否则不能这样做。我不知道你们班级的关系或他们如何融合在一起。通过您给我们的当前帖子,这是不可能的。

你怎么敢把变量创建为外来词呢!开玩笑吧

答案 4 :(得分:0)

这是我的解决方案:

public class IndkøbsKurvReservedele
{
    //public Reservedele Reservedel  { get; private set;}
    private int Rnr;
    public string Navn { get; private set; }
    public double Pris { get; private set; }
    public string Type { get; private set; }
    public int Antal { get; private set; }
    public double SPris { get; private set; }

    public IndkøbsKurvReservedele(Reservedele reservedel, int antal, double sPris)
    {
        Rnr = reservedel.Rnr;
        Navn = reservedel.Navn;
        Pris = reservedel.Pris;
        Type = reservedel.Type;
        Antal = antal;
        SPris = sPris;
    }
    public int HenrReservedelsNummer()
    {
        return Rnr;
    }
}

如果有人创造更好的。我会接受他们的。