将复杂类对象绑定到winforms中的datagridview

时间:2017-06-26 09:38:26

标签: c# .net winforms datagridview

我们有两个班级,并且与多个公司和产品有关系。因此,当我们展示产品时,我们会在公司中显示产品名称,因此可以直接绑定DataGridvView

public class Product : Common 
{
    public Int32 ProductID { get; set; }

    [MaxLength(100)]
    public string ProductName { get; set; }

    public virtual ProductType ProductOfType { get; set; }

    public virtual Company ProductCompany { get; set; }

    public virtual PackageType ProductPackageType { get; set; }
}

DGProduct.DataSource = db.Product.toList(),所以当我们将DataGridvView然后将它的show MedicineEntity.ProductCompany绑定为行时,有任何方法可以直接绑定或需要使用循环手动绑定。如果有任何选项可用,请有人建议,否则需要使用循环绑定DataGridvView或将列表转换为数据表。

1 个答案:

答案 0 :(得分:1)

最简单的方法是在ToString类上定义Company方法。

class Company
{
    public override string ToString()
    {
        return this.Name;
    }
}

其他方法涉及在DataGridView

中手动指定列

一种方法是使用Company编写自定义TypeDescriptionProvider和装饰TypeDescriptionProviderAttribute类。使用此文章获取完整代码:How to bind a DataGridView column to a second-level property of a data source

[TypeDescriptionProvider(typeof(CompanyDescriptionProvider))]
class Company
{
    // ...
}
class CompanyDescriptionProvider : TypeDescriptionProvider
{
    // implementation
}

另一种方法是定义BoundField并将其添加到您的网格中:

public class CompanyField : BoundField
{
    protected override string FormatDataValue(object dataValue, bool encode)
    {
        var obj = dataValue as Company;

        if (obj != null)
        {
            return obj.Name;
        }
        else
        {
            return base.FormatDataValue(dataValue, encode);
        }
    }
}