2011-12-28 59 views
0

我有一个DataTable来自一个Web服务,我需要绑定到一个ComboBox。我没有在XAML中进行绑定,所以这个问题是关于代码中的绑定。到目前为止,我已经尝试在代码中设置DisplayMemberPath和SelectedValue代码

 cboManager.DataContext = Slurp.DistrictManagerSelect().DefaultView; 
     cboManager.DisplayMemberPath = "Name"; 
     cboManager.SelectedValuePath = "NameListId"; 
     cboManager.SetBinding(ComboBox.ItemsSourceProperty, new Binding()); 

我试图

 DataTable tbl = new DataTable(); 
     tbl = Slurp.DistrictManagerSelect(); 
     cboManager.ItemsSource = ((IListSource)tbl).GetList(); 
     cboManager.DisplayMemberPath = "[Name]"; 
     cboManager.SelectedValuePath = "[NameListId]"; 
     DataContext = this; 

在这两种情况下,我得到经理的名单显示,但是当我从下拉框中选择,我得到[名称]和[NameListId]而不是我期待的价值观。我做错了什么(除了不使用XAML的DataBinding)?

编辑添加的答案后,我原来的职位排在

左右(根据Rachel的响应)尽量第三看起来像这样:

  using (DataTable tbl = Slurp.DistrictManagerSelect()) 
      { 
       List<ManagerList> list = new List<ManagerList>(); 
       foreach (var row in tbl.Rows) 
       { 
        list.Add(new ManagerList 
        { 
         NameListId = (int)row[0],       
         Name = row[1].ToString() 
        }); 
       } 
      } 

假设我在做什么,她指正确的方式我没有得到这个错误不能用[]对'object'类型的表达式进行索引

回答

0

你试过只是绑定到DataTabl直接?你有列Name和NameListId吗?离开DataContext(你已经分配了ItemsSource)。

DataTable tbl = Slurp.DistrictManagerSelect(); 
    cboManager.ItemsSource = tbl; 
    cboManager.DisplayMemberPath = "Name"; 
    cboManager.SelectedValuePath = "NameListId"; 

当您投向IListSource时,我怀疑它合并了所有的列。如果你想绑定到一个列表,那么你需要创建具有Name和NameListID属性的项目。

0

我想这是因为你的ItemsSourceDataTable,所以每个ComboBoxItem包含DataRow的一个DataContext和DataRow类不具有的属性称为NameNameListId

基本上,你要告诉组合框显示DataRow.Name,并将值设置为DataRow.NameListId,这两者都不是有效的属性。

我通常喜欢以数据分析为对象,并绑定ItemsSource一个List<MyObject>ObservableCollection<MyObject>

foreach(DataRow row in tbl.Rows) 
    list.Add(new MyObject { Name = row[0].ToString(), NameListId = (int)row[1] }); 

cboManager.ItemsSource = list; 
+0

瑞秋我需要你的答案一些澄清。我有没有正确的想法(我添加了编辑)?我需要做些什么来完成这项工作? – 2011-12-28 18:01:27

+0

@BukHix从你的'DisplayMemberPath'和'SelectedValuePath'中删除方括号。我最好的猜测是错误来自试图绑定到'ManagerList [Name]',这是无效的。您希望它绑定到'ManagerList.Name'。 – Rachel 2011-12-28 18:08:08

+0

我得到这两行上的错误NameListId =(int)row [0]和Name = row [1] .ToString(),所以我甚至没有到Manager.List进来的地步。目前唯一的我正在使用的代码是在编辑中发布的内容(我删除了DisplayMember和SelectedValue路径)。 – 2011-12-28 18:41:06