2017-07-05 3 views
2

私は、MySQLデータベースLINQを使用して外部テーブルのプロパティをdatagridviewに表示する方法は?

public partial class adviser 
{ 
    public int adviserId { get; set; } 
    public string employeeNo { get; set; } 
    public string lastName { get; set; } 
    public string firstName { get; set; } 
    public string middleName { get; set; } 
    public Nullable<int> statId { get; set; } 
    public Nullable<int> createdById { get; set; } 
    public Nullable<System.DateTime> createdOn { get; set; } 

    public virtual stat stat { get; set; } 
    public virtual user user { get; set; } 
} 

public partial class stat 
{ 
    public stat() 
    { 
     this.advisers = new HashSet<adviser>();    
    } 

    public int statId { get; set; } 
    public string statName { get; set; } 
    public string details { get; set; } 

    public virtual ICollection<adviser> advisers { get; set; } 
} 

から世代オート二つのテーブルが、私は顧問

public List<adviser> GetList(AdviserParam p) 
{ 
    List<adviser> items; 
    using (VotingContext context = new VotingContext()) 
    { 
     items = context.advisers.Include("stat").Where(x => 
      (x.adviserId == p.AdviserId || p.AdviserId == 0) 
      && (x.employeeNo.Contains(p.EmployeeNo) || p.EmployeeNo == "") 
      && (x.lastName.Contains(p.LastName) || p.LastName == "") 
      && (x.firstName.Contains(p.FirstName) || p.FirstName == "") 
      && (x.middleName.Contains(p.MiddleName) || p.MiddleName == "") 
      // && (x.statId == 1) 
      ).ToList();  
    } 

    return items; 
} 

のコレクションを取得するには、このメソッドを持っているし、私は、データグリッドビューにそれらを置くためにこれらのコードを使用します(winフォーム)、列を編集して、adviserIdとstatIdプロパティを表示しないようにしました。

ただし、dgvにはstatName(statsテーブルからの)は表示されません。どうすればそれを表示させることができますか?

+0

"stat.statName"のような列にバインドしようとすると、DataGridViewは自動的に子参照をサポートしません。あなたのオプションは、次のいずれかになります:a)データの平坦なビューを含むPOCO ViewModelにグリッドをバインドします。 b) "親"にプロパティを追加して、子の値を検査します。 (すなわち、stat.statNameを返すアドバイザのStatName)c) "stat"にバインドし、Nameを返すToString()実装を追加します。 d)CellFormattingを使用します。 (https://stackoverflow.com/questions/14046830/datagridview-use-datapropertyname-to-show-child-element-property) –

+0

新しい匿名タイプを選択すると、問題が解決されます。私の答えを見てください。 –

答えて

1

のステータスオブジェクトから値を取得するには、anonymous typeを選択し、必要なすべてのプロパティを含めることができます。

statNameとemployeeNoを含める簡単な例を示しました。

var items = context.advisers.Where(x => x.adviserId == yourAdviserID) 
     .Select(a=> new {name = a.stat.statName, employee=a.employeeNo}).ToList(); 

は今、あなたはあなただけ名前従業員列が表示されますDataGridViewのためにアイテムをバインドする場合。

advisorIDとstatIDを表示したくない場合は、新しい匿名タイプに含めないでください。

関連する問題