как связать 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);
    }