2017-02-18 16 views
0

我有一個名爲AirportList,airportCode,airportName和airportCountry作爲列的表。 在Windows應用程序窗體中,我有一個組合框,使用LinQ鏈接到AirportList。C# - 獲取組合框上的多個數據

我只是想組合框顯示,該airportName,airportCountry 這裏是代碼:

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

與該代碼,組合框顯示 例如:{airportName =洛杉磯國際機場,airportCountry =美國} 和{}符號每行顯示一次。

我想成爲洛杉磯國際機場,美國。 我的代碼有什麼問題,請幫助我

+0

查詢看起來不錯......你確定組合框列的配置是否正確? – 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();