![](/img/trans.png)
[英]Programmatically select a datagridview row doesn't fire bindingsource.currentchanged event
[英]Winforms: Which event to fire? combobox.selectedindexchanged OR bindingsource.currentchanged
假設我們在winforms應用程序中有一個Combobox
,它的項綁定到Bindingsource
。
當用戶更改combobox
的選定項目時,我需要觸發一個事件。
我應該處理combobox.selectedindexchanged
事件還是bindingsource.currentchanged
事件。 在性能方面還是其他方面哪個更好?
我已經進行了大量搜索,以查找文章或有關文章的內容,但找不到清晰明確的內容。 我感謝任何建議或解決方法。
UPDATE
用戶從combobox
選擇一個項目后,我需要基於所選對象ID
調用一個函數。 (可從Combobox1.SelectedValue
和bindingSource1.Current.ID
兩者訪問ID
)。 在這種情況下,我應該選擇哪個事件?
如果將ComboBox綁定到BindingSource,則通常將其保留在該位置。 如果確實需要利用事件,那么最好在Business Object中創建更多屬性。 例如,如果您要在組合框的索引值== 0時禁用按鈕,則只需在Business Object中創建一個屬性,將Button的Enabled屬性綁定到該屬性,例如:
public virtual bool IsFunctionEnabled
{
get { return (An_Items_SelectedIndex > 0); }
}
如果您確實需要在ComboBox的選定索引更改事件中進行操作,則我傾向於在Presentation Tier中進行操作,因為我不建議混入綁定源控件或其事件。
最好的解決方案是處理業務對象中的所有內容,並通過BindingSources綁定控件。 在Presentation Tier層中執行任何邏輯都會使測試變得困難,而更改BindingSources中的任何內容都會增加很多測試。
如果您希望在最終用戶選擇UI中的任何項目時處理事件,則應使用combobox.selectedindexchanged
因為可以出於多種原因觸發bindingsource.currentchanged
,例如在MSDN博客上提到的BindingSource.CurrentChanged Event,因此,如果需要,處理MSDN中提到的任何原因的事件,那么它將不必要地通過您可能已經為選擇更改事件編碼的邏輯。 處理事件時,您的代碼應特定。
畢竟,我知道使用Combobox.SelectedIndexChanded
事件會更好,因為我正在與用戶進行交互並在UI中尋找響應。 盡管這里的事件對我來說是相同的,但是可以使用Bindingsource.CurrentChanged
事件,以防我想要從列表更改之類的地方而不是UI跟蹤當前對象的更改。 我相信最好在這里使用combobox
事件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.