как связать ComboBox с DataTable
У меня есть DataTable со следующими столбцами:
id, имя, описание, ParentId
и хотел бы создать элемент управления WPF (.NET 4.0 framework), который реализует combobox, который отображает имена, привязанные к значениям id. Поэтому, когда пользователь выбирает имя, отображаемое в combobox, логика behind должна получить его значение id.
Я был бы очень благодарен, если бы кто-нибудь мог показать способ выполнения описанного выше.
4 ответов
вот так:
в вашем файле XAML поместите:
<ComboBox x:Name="myComboBox" DisplayMemberPath="Name" SelectedValuePath="id" />
в вашем коде сзади поставьте:
myComboBox.ItemsSource = myTable;
(myTable является ссылкой на таблицу, которую вы упомянули)
затем вы можете получить идентификатор выбранного в данный момент человека в поле со списком, используя выражение:
NameComboBox.SelectedValue
MVVM шаблон решения
XAML:
<ComboBox
x:Name="myComboBox"
DisplayMemberPath="Name"
SelectedValuePath="id"
ItemsSource="{Binding myDataTable}"
SelectedValue="{Binding theID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
>
" имя "и" id " являются столбцами в myDataTable.
код:
private MyViewModel _myViewModel = new MyViewModel();
this.DataContext = _myViewModel;
класс MyViewModel
public DataTable myDataTable { get; set; }
public short theID { get; set; }
выбранное значение (строка) в столбце "id" получает присвоить "theID".
мой XAML:
<ComboBox Margin="10,0,0,0" x:Name="listStatus"
HorizontalAlignment="Left" Height="30" VerticalAlignment="Top" Width="200" SelectionChanged="listStatus_SelectionChanged"
DisplayMemberPath="Status" SelectedValuePath="StatusID" />
Код:
private void Bind_StatusList()
{
Service1 serv = new Service1();
dtStatus = serv.GetStatuses(); // a WCF service getting the DataTable from a view from the database.
listStatus.ItemsSource = dtStatus.DefaultView;
}
это не дает выбранной опции при запуске окна, но, по крайней мере, список состояния отображается, когда я нажимаю comboBox.
private void InitCountry()
{
BasicData basicData = new DAL.BasicData();
DataTable CountryListDT = basicData.GetCountryList();
txtCountry.SelectedIndex = 0;
txtCountry.ItemsSource = CountryListDT.DefaultView;
}
private void txtCountry_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
BasicData basicData = new DAL.BasicData();
object obj = (object)e.AddedItems;
Int32 CountId = (Int32)txtCountry.SelectedValue;
InitProvince(CountId);
}