C# 将类的复杂数据源绑定到网格视图中

C# 将类的复杂数据源绑定到网格视图中,c#,windows,gridview,C#,Windows,Gridview,这里我有这些课程: public class CustomerDebt { public int ID { get; set; } public string Name { get; set; } public string Family { get; set; } public string Remain { get; set; } public List<Shops> details = new List<Shops>(); }

这里我有这些课程:

public class CustomerDebt
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Family { get; set; }
    public string Remain { get; set; }
    public List<Shops> details = new List<Shops>();
}

public class Shops
{
    public List<int> ints = new List<int>();
    public List<string> strings = new List<string>();
}
现在,我将债务列表绑定到网格视图中:

gridview.DataSource = debts;
它将自动使用CustomerDebt类的“ID、名称、族、剩余”属性填充网格视图。但是我需要将另一个类的列表属性List绑定到grid视图中

我认为它需要在网格中显示类似{get;set;}的内容,但我也不知道网格是否可以显示这样的嵌套类


希望我明白了。我应该怎么做才能用这样的类对象列表获得一个干净的网格视图?

Windows窗体中的DataGridView控件中没有内置的对主详细信息的支持。但我们可以选择使用第三方库,如:


至于绑定问题,是的,您需要有一个带有公共getter的公共属性:

public List<Shops> details { set; get; } = new List<Shops>();
公共列表详细信息{set;get;}=new List();
对于C#6之前的版本,您可以使用:

public class CustomerDebt
{
    public CustomerDebt()
    {
       details = new List<Shops>();
    }

    public List<Shops> details { set; get; }
}
公共类CustomerDebt
{
公共CustomerDebt()
{
详细信息=新列表();
}
公共列表详细信息{set;get;}
}

除了可接受的答案外,另一种方法如下所示。可以手动添加列,然后相应地填充行

        this.gridview.Columns.Add("ID", "ID");
        this.gridview.Columns.Add("Name", "Name");
        this.gridview.Columns.Add("Family", "Family");
        this.gridview.Columns.Add("Remain", "Remain");
        this.gridview.Columns.Add("Details", "Details");

        foreach (var debt in debts)
           foreach (var detail in debt.details)
               this.dataGridView1.Rows.Add(debt.ID, debt.Name, debt.Family, debt.Remain, "Ints:" + string.Join(",", detail.ints) + "   Strings:" + string.Join(",", detail.strings));

我不记得.NET内置Windows窗体网格支持主细节数据源。是的,当控件支持它时,您需要一个公共getter
public List details{set;get;}=new List()我使用的是Telerik网格,但是关于公共getter,它不会像您编写的那样工作,并且会给出错误@陌生人,这是一个C#6语法。检查编辑之前的版本。两个问题。首先,我怎样才能找到我的C版本?我使用的是visual studio 2013,其次,它现在似乎正在工作,但Telerik Grid无法显示包含is内部数据的详细信息列,这是另外两个列表。我将只在其中写一个文本,如“System.Collection.Generic”@陌生人您需要对Shop类中的列表执行相同的操作。然而,我不确定Telerik的网格是否支持多层嵌套。至于c#版本,请检查:是的,我在Shop类中使用了列表,但Telerik不支持这种视图。我该怎么办?
public class CustomerDebt
{
    public CustomerDebt()
    {
       details = new List<Shops>();
    }

    public List<Shops> details { set; get; }
}
        this.gridview.Columns.Add("ID", "ID");
        this.gridview.Columns.Add("Name", "Name");
        this.gridview.Columns.Add("Family", "Family");
        this.gridview.Columns.Add("Remain", "Remain");
        this.gridview.Columns.Add("Details", "Details");

        foreach (var debt in debts)
           foreach (var detail in debt.details)
               this.dataGridView1.Rows.Add(debt.ID, debt.Name, debt.Family, debt.Remain, "Ints:" + string.Join(",", detail.ints) + "   Strings:" + string.Join(",", detail.strings));