2012-07-25 46 views
0

我正在開發SSIS控制流任務。在我的UI上,我有一個組合框,它顯示可用的用戶變量列表以及添加新變量的能力。我能夠成功添加變量,但即使重新填充數據源後,我也無法在組合框中看到它。在SelectionChangeCommitted事件上,我保存了組合框選擇。如果用戶選擇添加新的SSIS用戶變量,則會在該方法中提示他們。變量被保存,然後我重新填充組合框的數據源。雖然我的新變量沒有顯示在下拉列表中。我應該在另一個事件上重新組合框嗎?如何填充組合框添加新項後

下面我使用的代碼示例。

private List<string> FillVariablesList() 
    { 
     List<string> Variables = new List<string>(); 
     Variables.Add(""); 
     Variables.Add(New_Variable); 
     foreach (Variable v in this.theTaskHost.Variables) 
     { 
      if (!v.SystemVariable && v.DataType == TypeCode.String) 
       Variables.Add(v.Name); 
     } 

     return Variables; 
    } 

combobox.datasource = FillVariablesList(); 
+0

FillVariables做什麼? – 2012-07-25 16:52:28

+0

其上述方法。它使用變量名填充列表並返回列表。我的appologies在上面的例子中的方法名稱是錯誤的。我修復了它。 – zeencat 2012-07-25 16:58:24

+0

你在任何地方調用combobox.Databind()嗎? – 2012-07-25 17:00:37

回答

1

嘗試使用像這樣的共享ObservableCollection。

... 
class A 
{ 
    private ObservableCollection<string> variables = new ObservableCollection<string>(); 

    ... 
    private void FillVariablesList() 
    { 
     variables.Clear(); 
     variables.Add(""); 
     variables.Add(New_Variable); 

     foreach (Variable v in this.theTaskHost.Variables) 
     { 
      if (!v.SystemVariable && v.DataType == TypeCode.String) 
       variables.Add(v.Name); 
     } 

     this.comboBox.DataSource = null; 
     this.comboBox.DataSource = variables; 
    } 
} 

你甚至可以設置在FillVariables方法,以便它只是增加了新的一個,而不是將其清除,並重新填充 - 我只是不知道如何使你的代碼的其餘部分的結構。

+0

謝謝你。我明天早上肯定會放棄它。我從來沒有遇到過ObservableCollection類型。要調查的東西。 – zeencat 2012-07-25 22:14:40

+0

即使在引用我的類中的System.Collection.ObjectModel庫後,我仍無法找到ObservableCollection類型。有任何想法嗎?沒關係,我發現它。我沒有在我的項目中引用WindowBase v3 dll。 – zeencat 2012-07-26 08:47:32

+0

我按照建議添加了上述內容。我在form_load事件中設置組合框的數據源,並在將數據源分配給組合框之前填​​充變量observablecollection。當我添加一個新變量時,它將被添加到可觀察集合中,但comobox數據源未被刷新。我是否應該重新分配元數據的數據源? – zeencat 2012-07-26 09:27:35