Я бы сделал вот так:
1) Объявил бы класс вида
class ProductDto
{
[System.ComponentModel.DisplayName("ID")]
[System.ComponentModel.Browsable(false)]
public int ProductId { get; set; }
[System.ComponentModel.DisplayName("Наименование")]
public string ProductName { get; set; }
[System.ComponentModel.DisplayName("Цена")]
public float ProductPrice { get; set; }
[System.ComponentModel.DisplayName("Категория")]
public string Category { get; set; }
[System.ComponentModel.DisplayName("Категория (ID)")]
[System.ComponentModel.Browsable(false)]
public int CategoryId { get; set; }
}
Получил бы записи:
var dtos = (db.ProductSet.Include(x=>x.Category)
.Select(x => new ProductDto {
ProductId = x.ProductId,
ProductName = x.ProductName,
ProductPrice = x.ProductPrice,
Category = x.Category.CategoryName,
CategoryId = x.Category.CategoryId
})).ToArray();
Ну и его уже бы привязывал к DataSoure, через класс BindingSource