【问题标题】:how to bind ComboBox with DataTable如何将 ComboBox 与 DataTable 绑定
【发布时间】:2010-05-01 12:09:48
【问题描述】:

我有包含以下列的数据表:

id、名称、描述、ParentId

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

如果有人能展示上述方法,我将不胜感激。

【问题讨论】:

  • 您不需要为此创建控件...

标签: wpf data-binding


【解决方案1】:

像这样:

在您的 XAML 文件中,输入:

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

在你的代码后面,放:

myComboBox.ItemsSource = myTable;

(myTable 是对您提到的表格的引用)

然后你可以使用表达式在组合框中到达当前选择的人的id:

NameComboBox.SelectedValue

【讨论】:

  • DataTable 不能直接绑定。您必须从 myTable.AsEnumerable() 绑定 myTable.DefaultView 或 IEnumerable。
  • ItemsSource 也可以在 XAML 中设置:ItemsSource="{Binding myProperty, Mode=OneWay}"。正如 Nps/Igor 所指出的,该属性应返回 DataView 而不是 DataTable。
  • 谢谢,现在小菜一碟
  • 为什么这被接受为答案? DataTable 不能像这样绑定到 Combobox...
【解决方案2】:

MVVM模式解决方案

XAML:

<ComboBox 
   x:Name="myComboBox" 
   DisplayMemberPath="Name"
   SelectedValuePath="id"
   ItemsSource="{Binding myDataTable}"      
   SelectedValue="{Binding theID, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
>

“Name”和“id”是 myDataTable 中的列。

后面的代码:

private MyViewModel _myViewModel = new MyViewModel();
this.DataContext = _myViewModel;

MyViewModel 类

public DataTable myDataTable { get; set; }
public short theID { get; set; }

“id”列下的选定值(行)被分配给“theID”。

【讨论】:

    【解决方案3】:
        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);
        }
    

    【讨论】:

      【解决方案4】:

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

      当窗口启动时,这并没有给出一个选定的选项,但是当我点击组合框时,至少会显示状态列表。

      【讨论】:

        猜你喜欢
        • 2010-12-16
        • 2014-04-19
        • 1970-01-01
        • 1970-01-01
        • 2015-11-29
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 2018-01-23
        相关资源
        最近更新 更多