2013-03-17 51 views
0

我有一個名爲StatusId的表中有一列的數據表(作業)。我有另一個數據表(jobStatus)。作業表有1個工作記錄,jobstatus表具有所有工作狀態。刷新組合框列表中的數據

在我的winforms表單上,我顯示了工作記錄,工作狀態是一個組合框,顯示jobstatus表的內容。列表部分(DisplayMember)綁定到jobstatus表,數據部分綁定到作業表。 (ValueMember)所以,一切運作良好,當我的工作被選中並顯示時,組合框選擇各自的工作狀態......一切都很好。

現在我有另一種形式(JobStatus),我可以在其中添加更多作業狀態記錄。所以當我輸入/更改工作記錄時,我發現我需要另一份工作狀態,所以我跳到我的工作狀態表單並輸入新的狀態。然後我跳回工作表單,現在我想要能夠在組合框中選擇我的新工作狀態。

我的問題是這個senario的最佳實踐是什麼,其中新記錄已被添加或編輯到查找樣式列表,用於在另一個窗體上填充組合框。我曾嘗試將代碼放在窗體的激活事件中,除了窗體閃爍之外,它看起來很醜。

任何想法???

我幾乎在做你說的話,這讓我看起來更接近代碼。問題是我正在處理的代碼行的順序,我發現,當

舊代碼

cboCustomer.DataSource = Business.Contact.GetContact(Enums.ContactType.Customer).Tables[0]; 
      sorted = ((DataTable) cboCustomer.DataSource).DefaultView; 
      sorted.Sort = "Name ASC"; 

新來的代碼

DataView dv = Business.Contact.GetContact(Enums.ContactType.Customer).Tables[0].DefaultView; 
      dv.Sort = "Name ASC"; 
      DataTable dt = dv.ToTable(); 
      cboCustomer.DataSource = dt; 

的作品就像一個魅力。歡呼聲您的幫助

回答

1

您應該可以使用Activated事件沒有問題。這是什麼the documentation說,這是很好的:

你可以使用這個事件的任務,如更新基於窗體的數據所做的更改表格的內容時未激活的形式。

當然,當您在父窗體上訂閱此事件時,您會收到一些誤報。考慮用戶切換到而沒有嘗試使用組合框控件的情況。這並不是什麼大問題,但在這種情況下,您將無緣無故地更新了組合框。通過切換到處理組合框控件的Enter event可輕鬆解決這個問題。只有當特定的控件獲得焦點時,纔會提升這個。 Enter事件的唯一限制是您無法從此事件處理程序內部更改集中控件(但不管怎樣,您不想這樣做)。

所以,現在我們需要修正閃爍問題,我認爲您會發現它很簡單。在事件處理程序方法的開始處(不管使用哪種方法),在開始更新組合框之前,請調用其BeginUpdate method。這可以防止控件在更新期間閃爍(通過抑制繪畫)。最後,您需要致電EndUpdate,然後重新啓用繪畫並執行一次重繪以反映您的更改。

我剛測試過這個,我沒有看到任何閃爍。你得到的最多隻有一次閃爍,而控件被重新繪製以反映你的變化。顯然,你做不到比這更好。

+0

answer above cheers – trailerman 2013-03-18 01:16:25