2011-12-28 16 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