0

私は、すべての Entity Framework モデルとデータ バインディングが初めてです。インターフェイスを作成Candidateし、db のテーブルからモデル クラスを生成しました。

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. 私の DB には、次の列を持つ Candidate_To_Company というテーブルがあります: PK、Candidate_FK、Company_FK、Insertion_Date このテーブルを DataGridView にバインドしたいと思います。しかし、Candidate_FK を表示する代わりに、ICandidate から候補名を表示したいと思います。これは可能ですか?
4

2 に答える 2

0

インターフェイスのプロパティのみをDataGridViewにバインドする方法はありますか?

オプションのカップル:

  1. DataGridView列を自動生成するのではなく、明示的に設定します。私の経験では、通常、自動生成された列から始めて、列を明示的に設定する必要がある理由(フォーマット、順序など)を見つけます。
  2. これらのプロパティのみを持つモデルクラスを作成し、手動またはAutoMapperなどのツールを使用してエンティティクラスからそのモデルに変換します。

私のDBには、Candidate_To_Companyというテーブルがあります...ICandidateからの候補者名を表示したいと思います。これは可能ですか?

外部キー以外の列があるため、追加したPK(不要なIMHOでは)InsertDateがモデルで使用できなくなるため、EFはそれを多対多の関係としてマップせず、ナビゲーションプロパティを設定しません。 。

繰り返しますが、いくつかのオプション:

  1. 質問1用に別のモデルを作成した場合は、モデルにナビゲーションプロパティを設定し、エンティティモデルから中間テーブルを経由してビューモデルにマップします。

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

  2. 中間テーブルを、それ自体のエンティティではなく多対多の中間テーブルとして使用するようにモデルに指示する方法を理解します。これは、DBがトリガーやIDENTITY列を介してこれらの列に自動的にデータを入力することを前提としているため、エンティティモデルにそれらを含める必要はありません。

  3. PK列とInsertionDate列を削除し、モデルを生成してから、列を追加します。これは実際には少しハックであり、モデルを再生成する必要がある場合は問題が発生する可能性があります。これは、#2の方法を確認するための実験としてのみ行います。
于 2012-12-05T23:13:06.573 に答える
0

DataGrid をインターフェイスにバインドする必要がありますか? インターフェイスが必要なデータのみを DataGrid に表示する理由は何ですか?..

あなたができることは、DataGridをDataTableにバインドすることです(SqlDataAdapterを介して入力されます)。そこから、バインドするデータベース列を指定し、必要に応じて DataGrid の列ヘッダーの名前を変更できます。

http://www.codeproject.com/Tips/362436/Data-binding-in-WPF-DataGrid-controlを参照してください

于 2012-12-05T23:15:17.347 に答える