检测BindingSource SortChanged事件以在winforms中实现双向绑定
我正在尝试使用C#winforms编写一个双向绑定应用程序 我将BindingNavigator和DataGridView绑定到同一数据源 因此,我可以使用双向绑定(在winforms中为yes),我希望能够在bindingSource排序顺序发生更改时进行检测 当我单击DataGridView的列标题时,网格的排序顺序会改变 并且BindingSource.ListChanged事件不会触发 但是bindingSource.Sort仍然为空 单击网格列标题时,将触发BindingSource.ListChanged事件检测BindingSource SortChanged事件以在winforms中实现双向绑定,winforms,datagridview,bindingsource,Winforms,Datagridview,Bindingsource,我正在尝试使用C#winforms编写一个双向绑定应用程序 我将BindingNavigator和DataGridView绑定到同一数据源 因此,我可以使用双向绑定(在winforms中为yes),我希望能够在bindingSource排序顺序发生更改时进行检测 当我单击DataGridView的列标题时,网格的排序顺序会改变 并且BindingSource.ListChanged事件不会触发 但是bindingSource.Sort仍然为空 单击网格列标题时,将触发BindingSource.
private void bindingSource_ListChanged(object sender, ListChangedEventArgs e)
{
if (e.ListChangedType == ListChangedType.Reset)
{
if (bindingSource.Sort != null)
{
controller.Sort = bindingSource.Sort; // never gets here. Why?
}
}
}
为什么单击DataGridView列标题不设置bindingSource.Sort属性?
为了检测bindingSource排序已更改,我应该侦听什么事件?遇到此问题(原因与多列排序不同)我发现,Bindingsource没有排序更改事件,也没有触发Datagridview的自己的排序事件(它似乎只是在排序时触发),这让我感到惊讶 datagridview“知道”甚至更改其排序图示符位置 我解决这个问题的方法并不适合大多数人,因为它是特定于我正在编写的任务的。在我的多列排序例程中,我跟踪bindingsource.sort字符串,然后跟踪Datagridview中的常规事件(当前正在尝试SelectionChanged)我将我的排序字符串与当前的Bindingsource字符串进行比较,并在不同时关闭多列排序指示器。这对我来说没问题,因为我所有的数据网格都基于一个通用的自定义控件 我想到的唯一其他方法是基于Bindingsource创建一个自定义控件,并添加一个排序方法(调用Bindingsource排序方法),然后触发我自己的事件。如果刚开始一个新项目,但改变一个大项目却成了一件痛苦的事,这将是很好的 令人遗憾的是,我从一开始就为每个UI控件(Winforms)创建了一个自定义控件,但从未想过为数据访问创建一个通用控件 希望这对面临同样问题的人有所帮助