![](/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.