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

Binding Complex Data source of a class into Grid View

这里我有这些课程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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>();
}

我正在列出CustomerDBTS对象:

1
List<CustomerDebt> debts = new List<CustomerDebt>();

在这里我将添加一个项目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Shops shop = new Shops();
shop.ints.Add(1);
shop.ints.Add(2);

shop.strings.Add("M");
shop.strings.Add("S");
shop.strings.Add("F");

CustomerDebt d = new CustomerDebt();

d.ID = 12;
d.Name ="Joe";
d.Family ="Steven";
d.Remain ="1000";
d.details.Add(shop);

debts.Add(d);

现在,我将债务列表绑定到网格视图中:

1
gridview.DataSource = debts;

它将自动用customerDBT类的"id、name、family、remay"属性填充网格视图。但我需要将列表属性(另一个类的列表)绑定到网格视图中。

我认为在网格中显示它需要get;set;之类的东西,但我也不知道网格是否可以显示这样的嵌套类。

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


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

  • 特雷里克
  • 德维斯特

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

1
public List<Shops> details { set; get; } = new List<Shops>();

对于C 6之前,您可以使用:

1
2
3
4
5
6
7
8
9
public class CustomerDebt
{
    public CustomerDebt()
    {
       details = new List<Shops>();
    }

    public List<Shops> details { set; get; }
}


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

1
2
3
4
5
6
7
8
9
        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));