将几列绑定到组合框

时间:2011-02-16 22:23:06

标签: c# winforms sql-server-2005 dataset

我在数据集中有两个表

城市和国家。

我想在组合框城市名称和国家/地区名称中显示。

我的桌子似乎:

Cities:
int ID 
varchar(max) Name
varchar(2) CountryCode

Countries:
varchar(2) Code
varchar(max) Name

现在,我的组合框出现了:

 dictionaryData1.Cities.DefaultView.Sort = dictionaryData1.Cities.NameColumn.ColumnName;
                cityLabeledComboBoxInput.DataSource = dictionaryData1.Cities;
                cityLabeledComboBoxInput.DisplayMember = dictionaryData1.Cities.NameColumn.ColumnName;
                cityLabeledComboBoxInput.ValueMember = dictionaryData1.Cities.CitiesIDColumn.ColumnName;

有没有办法显示这两个表中的名字?

也许在sql中添加另一列(sic!)?

3 个答案:

答案 0 :(得分:2)

使用ComboBox的Format事件并找到该项的父行,并设置事件arg的Value属性。

 

void comboBox_Format(object sender, ListControlConvertEventArgs e)
{
        DataRowView cityRow = e.ListItem as DataRowView;
        string city = cityRow["name"].ToString();
        DataRow countryRow = cityRow.Row.GetParentRow("parentRelation");
        string country = countryRow["name"].ToString();
        e.Value = city + " " + country;
}

或者您可以在cities-table中添加一个列,并将expression属性设置为父关系并显示该列。

答案 1 :(得分:0)

使用像这样的查询作为您的数据源,尽管这会假设您的DAL很多。

select Countries.Code + '.' + cast(Cities.ID as varchar(15)) as ValueMember, 
       Cities.Name + ', ' + Countries.Name
from ...
    inner join ...

答案 2 :(得分:0)

使用类似于以下SQL的内容作为数据集的数据源:

SELECT City.ID, City.Name + ", " + Country.Name AS CityCountry
FROM Cities City
   INNER JOIN Countries Country ON City.CountryID = Country.CountryID

另一个选项与上面类似,但会提供一些额外的可重用性:从上面的SQL创建一个视图。