2009-12-11 59 views
0

的WinForms,.NET 3.5C#中的組合框綁定到越來越多

我有一個需要顯示的項目越來越多了一個組合框 - 有一個長期運行的過程中獲取的項目,我希望能夠隨着時間的推移向用戶顯示物品。

將DatSource屬性設置爲初始數組/列表不起作用,因爲後續添加未由ComboBox註冊。

現在我可以將DatSource設置爲綁定列表 - 但看起來這會變得非常緩慢。當我加油時,事情就會好起來;但是我每隔幾秒就會添加一千個項目,而且這個速度只是掛起了表單。

我完全願意相信這是一個直接綁定到BindingList的固有缺點,但想更好地理解發生了什麼。關於DatSource,BindingList和BindingSource的MSDN文章討論像BindingContexts和CurrencyManagers這樣的概念,但是並沒有幫助我理解具體事件,重繪以及可能導致速度減慢的那些內容。

我懷疑BindingSource註冊一個項目添加事件到組合框,然後通過一系列的項目添加,DropDown檢查和失效。但MSDN瀏覽和谷歌搜索沒有幫助我回答這個問題。

任何人都可以指向正確的方向嗎?


澄清

我知道的設計問題,以及如何解決此問題。所以我並不是真的在尋找一個解決方案 - 但我想想了解正在發生的更深層次的機制。

+6

只是出於好奇,每隔幾秒就會添加數千個項目的組合框怎麼能對任何用戶都有用? – BFree 2009-12-11 16:10:55

+0

同意...太多項目是有用的。按類別或某物將組合框分成某種過濾系統。 – 2009-12-11 16:13:03

回答

2

對於這些操作,不會進行默認控制,因爲據我所知,所有條目都被緩存在控件上。

您需要使用正確支持「虛擬」模式的控件,這意味着它只從當前列表中加載要顯示的少量項目。

0

您可以嘗試在ComboBox.BeginUpdate()和ComboBox.EndUpdate()中包裝添加操作,但爲了獲得更多幫助,您可能需要添加批次的項目。另一個選擇是不使用數據綁定,只使用ComboBox.Items集合。不像花式,但它應該有所幫助。

0

我有一段艱難的時間,也使用標準控件顯示大量數據。

我會盡量記得在我的代碼上線後在這裏發佈一個鏈接,但爲了解決這個問題,我將一個滾動條附加到面板上,並使用滾動值來計算應該是哪些數據在面板中可見。