Привязать несколько столбцов к списку - PullRequest
1 голос
/ 17 февраля 2011

У меня есть две таблицы в наборе данных

Города и страны.

Я хочу отобразить в выпадающем списке название города плюс название страны.

Мои таблицы отображаются в:

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 ]

2 голосов
/ 17 февраля 2011

Используйте событие Format ComboBox, найдите родительскую строку элемента и установите свойство 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;
}

Или вы можете добавить столбец в таблице городов со свойством выражения, установленным для родительского отношения, и отобразить его.

0 голосов
/ 17 февраля 2011

В качестве источника данных для набора данных используйте нечто похожее на следующий SQL:

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

Другой вариант будет аналогичен приведенному выше, но обеспечит некоторую дополнительную возможность повторного использования: создайте представление из приведенного выше SQL.

0 голосов
/ 17 февраля 2011

Используйте такой запрос в качестве источника данных, хотя это предполагает многое из вашего DAL.

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