C# - 在组合框上获取多个数据

时间:2017-02-18 18:04:04

标签: c# winforms linq combobox

我有一个名为AirportList的表,其中包含airportCode,airportName和airportCountry作为列。 在Windows应用程序表单中,我有一个组合框,我使用LinQ链接到AirportList。

我只想要组合框显示,airportName,airportCountry 这是代码:

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

使用该代码,组合框显示 例如:{airportName =洛杉矶国际机场,airportCountry =美国} 并且{}符号出现在每一行。

我想成为美国洛杉矶国际机场。 我的代码有什么问题,请帮帮我

2 个答案:

答案 0 :(得分:2)

Winforms ComboBox使用ToString方法的结果显示其项目。在您的代码中,您可以创建匿名对象,应用于这些实例的ToString会生成您的结果。

您只需声明一个仅用于组合框

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

将代码更改为

define

现在,select表达式创建了一个AirportItem类的实例,并且该类具有ToString方法的覆盖,该方法可以准确返回要在组合框中显示的内容。

答案 1 :(得分: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();