我在数据集中有两个表
城市和国家。
我想在组合框城市名称和国家/地区名称中显示。
我的桌子似乎:
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!)?
答案 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创建一个视图。