仅绑定接口属性的数据



我是所有实体框架模型和数据绑定的新手。我创建了一个接口,并从数据库中的Candidate表中生成了一个模型类。

public interface ICandidate
{
String ID { get; set; }
string Name { get; set; }
string Mail { get; set; }
}

我为生成的Candidate模型创建了一个分部类,因此我将能够在不更改任何生成代码的情况下实现ICandidate接口。

public partial class Candidates : ICandidate
{
string ICandidate.ID
{
get { return this.PK; }
set { _PK = value; }
}
string ICandidate.Name
{
get{ return this._Name; }
set { _Name = value; }
}
string ICandidate.Mail
{
get { return this._Email; }
set { this._Email = value; }
}
}

当然,生成的类具有比接口更多的属性(比如接口不需要的IsDeleted字段)。

我想在DataGridView中显示数据库中的所有候选项。但我希望只有接口的属性才会在DataGridView中显示为列。

  1. 有没有办法只绑定接口的属性DataGridView
  2. 在我的数据库中,有一个名为Candidate_To_Company的表,其中包含以下列:PK,候选日期_FK,公司_FK,插入日期我想将此表绑定到DataGridView。但是代替显示Candidate_FK,我希望显示来自ICandidate的候选名称。这可能吗

有没有办法只绑定接口的属性DataGridView?

几个选项:

  1. DataGridView中显式设置列,而不是自动生成列。根据我的经验,我通常从自动生成的列开始,然后找到一些需要显式设置列的原因(格式、顺序等)
  2. 创建一个只具有这些特性的模型类,然后手动或使用AutoMapper等工具将实体类转换为该模型

在我的数据库中有一个名为Candidate_To_Company的表。。。我想显示ICandidate的候选人姓名。这可能吗?

由于您有外键以外的列,EF不会将其映射为多对多关系并为您设置导航属性,因为您添加的PK(在不必要的IMHO中)和InsertDate在您的模型中不可用。

再次,几个选项:

  1. 如果您为问题1创建了一个单独的模型,请在模型中设置导航属性,并通过中间表从实体模型映射到视图模型:

    Company.Candidates = efCompany.Candidate_to_Companies.Select(cc=>cc.Candidate).ToList();

  2. 弄清楚如何告诉模型将中间表用作多对多中间表,而不是它自己的实体。这假设DB通过触发器和/或IDENTITY列自动填充这些列,因此不需要在实体模型中包含它们。

  3. 删除PK和InsertionDate列,生成模型,然后添加额外的列。这实际上有点麻烦,如果你需要重新生成模型,可能会给你带来问题。我只想做一个实验,看看如何做#2

数据网格需要绑定到接口吗?接口让DataGrid只显示您想要的数据的原因是什么?。。

您可以做的是将DataGrid绑定到DataTable(通过SqlDataAdapter填充)。从那里,您可以指定要绑定的数据库列,并根据需要重命名DataGrid的列标题。

请参阅http://www.codeproject.com/Tips/362436/Data-binding-in-WPF-DataGrid-control

最新更新