如何将ComboBox与DataTable绑定

时间:2010-05-01 12:09:48

标签: wpf data-binding

我有以下列的DataTable:

id,Name,Description,ParentId

并且想要创建一个WPF控件(.NET 4.0框架),它实现了一个组合框,它显示绑定到id值的名称。因此,当用户选择组合框中显示的名称时,后面的逻辑必须检索其id值。

如果有人能说明如上所述的方式,我将非常感激。

4 个答案:

答案 0 :(得分:28)

像这样:

在您的XAML文件中,输入:

 <ComboBox x:Name="myComboBox" DisplayMemberPath="Name" SelectedValuePath="id" />

在您的代码中,放置:

myComboBox.ItemsSource = myTable;

(myTable是对你提到的表的引用)

然后,您可以使用表达式

来获取组合框中当前所选人员的ID
NameComboBox.SelectedValue

答案 1 :(得分:1)

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”。

答案 2 :(得分:0)

我的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;
}

当窗口启动时,这不会给出选定的选项,但是当我单击组合框时,至少会显示状态列表。

答案 3 :(得分:-1)

    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);
    }