2017-02-18 5 views
0

airportCode、airportName、およびairportCountryを列として持つAirportListという表があります。 私はLinQを使用してAirportListにリンクしたコンボボックスを1つ持っています。コンボボックスで複数のデータを取得する

私はちょうどここのコードですairportCountry 、コンボボックスの表示、airportNameをしたい:そのコードで

cmbLocation.DataSource = (from A in cfse.AirportList 
         orderby A.airportName 
         select new 
         { 
          A.airportName, 
          A.airportCountry 
         }).ToList(); 

、コンボボックスの表示 例:{airportName =ロサンゼルス国際空港、airportCountry =アメリカ} と{}記号がすべての行に表示されます。

私はちょうどロサンゼルス国際空港、アメリカになりたいです。 私のコードに間違いがありますか?

+0

クエリがOKに見える...あなたはコンボボックスの列が正しく設定されていることを確認していますか? – jleach

答えて

2

WinForms ComboBoxは、ToStringメソッドの結果を使用してアイテムを表示します。あなたのコードでは、匿名のオブジェクトを作成し、これらのインスタンスに適用されたToStringによって結果が得られます。

あなたは単にあなたのコンボボックス

public class AirportItem 
{ 
    public string Name {get;set;} 
    public string Country {get;set;} 
    public override string ToString() 
    { 
     return string.Join(", ", this.Name, this.Country); 
    } 
} 

のためだけに使用するクラスを宣言し、

cmbLocation.DataSource = (from A in cfse.AirportList 
          orderby A.airportName 
          select new AirportItem 
          { 
           Name = A.airportName, 
           Country = A.airportCountry 
          }).ToList(); 

にコードを変更することができます今、選択式はAirportItemクラスのインスタンスを作成し、このクラスが持っていますコンボボックスに表示する内容を正確に返すToStringメソッドをオーバーライドします。

+0

おい、それは私をたくさん助ける、ありがとう –

2

コンボボックスには列がないため、オブジェクトを文字列に変換する必要があります。これは、ComboboxのDisplayMemberプロパティを使用して行うことができます。

はまず、ラッパークラスを作成:

public class Airport { 
    public string Name { get; set; } 
    public string Country { get; set; } 

    public string DisplayName { 
    get { return Name + ", " + Country; } 
    } 
} 

をそしてラッパークラス内のデータを置く:

cmbLocation.DisplayMember = "DisplayName"; 
cmbLocation.DataSource = 
    (from A in cfse.AirportList 
    orderby A.airportName 
    select new Airport { 
      Name = A.airportName, 
      Country = A.airportCountry 
    }).ToList(); 
関連する問題