我们有两个班级,并且与多个公司和产品有关系。因此,当我们展示产品时,我们会在公司中显示产品名称,因此可以直接绑定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
或将列表转换为数据表。
答案 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);
}
}
}