2012-11-09 41 views
0

我的問題是「有沒有方法來綁定數據到comboBox沒有selectedItem和文本值被更改/填充?」 (我想下拉框中留空白)C#綁定到comboBox沒有selectedItem和文本填充

這是我做的一個例子:

 Dictionary<int,string> test = new Dictionary<int,string>(); 
     test.Add(1, "Company1"); 
     test.Add(2, "Company2"); 
     test.Add(3, "Company3"); 
     test.Add(4, "Company4"); 
     test.Add(5, "Company5"); 
     test.Add(6, "Company6"); 

     var list = test.Select(x => new { CompanyName = x.Value }).ToList(); 

     comboBox1.DataSource = list; 
     comboBox1.DisplayMember = "CompanyName"; 
     comboBox1.ValueMember = "CompanyName"; 
     comboBox1.SelectedItem = null; 

如果你運行這段代碼,它工作正常,因爲它加載如此之快,它看起來像組合框保持空白。

但是,如果單步執行代碼,將會看到在將DataSource分配給「list」時,SelectedItem和Text值會發生更改。

我的實際LINQ查詢比較大,因此加載速度較慢。在清除之前,我的comboBox會「閃爍」文本值,並且我想刪除這個醜陋的閃光。

我已經嘗試過在DataSource賦值之前和之後將SelectedItem和Text值設置爲null(或「」)的不同組合,但我無法使「flash」消失。

任何建議,非常感謝! =)

編輯:我也想補充一點,這只是發生在最初的形式加載...如果我改變的BindingSource,然後重新回到我原來的(再次運行完全相同的代碼),它不't「flash」...不知道這是否有幫助或有所作爲...

回答

1

另一種簡單的建議是隻加空公司名稱作爲第一個項目在列表

list.Insert(0, ""); 
+0

這對我來說有點不好,因爲這會在我的組合框中留下一個空白項目......但是,這是目前唯一的工作......所以除非有人提出更好的答案,否則我將不得不堅持這......謝謝! –

1

嘗試在您的數據綁定代碼周圍使用comboBox1.SuspendLayout()comboBox1.ResumeLayout()。第一個應該防止它更新,直到第二個被調用。

+0

這聽起來像個好主意,但對我來說不起作用......可能是我有其他奇怪的事情發生,但是這不必嚴格遵守佈局屬性呢? 根據MSDN的說法,SuspendLayout和ResumeLayout方法可以同時使用來抑制多個佈局事件,同時調整控件的多個屬性。 –

+0

@JamesEkema - 我很確定我已經使用了它,但是我沒有在回答之前不要重新測試它。不過,我很高興你找到了答案。 – Bobson

1

空引用添加到列表中的第一個列表元素設置comboBox1.DataSource之前。

var list = test.Select(x => new { CompanyName = x.Value }).ToList(); 
list.Insert(0, null); 
comboBox1.DataSource = list; 
0

我也陷入了同樣的問題,但我不能加那麼我所做的是一個空的項目:

comboBox.ForeColor = comboBox.BackColor; 
//set the combobox datasource 
comboBox.ForeColor = SystemColors.WindowText; 

這使得組合框顯示爲空白,同時設置數據源而不添加空的項目。

相關問題