C# 更新BindingSource';使用Datagrid';什么是SelectedItem属性?

C# 更新BindingSource';使用Datagrid';什么是SelectedItem属性?,c#,wpf,datagrid,highlight,bindingsource,C#,Wpf,Datagrid,Highlight,Bindingsource,是否有方法将BindingSource的当前项属性与Datagrid的选定项同步?例如,当我按下按钮调用BindingSource.MoveNext()然后使用BindingSource.Current设置Datagrid.SelectedItem时,我单击Datagrid中的第10行;突出显示的行是第2行,而不是第11行 我这样做不对吗?我只是想让datagrid在操作后突出显示下一行(例如更新我单击的行),但datagrid似乎没有提供这样做的方法,我只剩下处理BindingSource。当

是否有方法将BindingSource的当前项属性与Datagrid的选定项同步?例如,当我按下按钮调用BindingSource.MoveNext()然后使用BindingSource.Current设置Datagrid.SelectedItem时,我单击Datagrid中的第10行;突出显示的行是第2行,而不是第11行


我这样做不对吗?我只是想让datagrid在操作后突出显示下一行(例如更新我单击的行),但datagrid似乎没有提供这样做的方法,我只剩下处理BindingSource。

当您单击
DataGridView
中的特定行时,将
BindingSource
对象的
Position
属性设置为适当的值,而不是为
DataGridView
指定所选行(如果您希望数据网格和集合在其中)同步您必须为数据网格设置IsSynchronizedWithCurrentItem=true。您的集合应为ICollectionView或BindingListCollectionView类型。你可以用电脑来实现这一点

this.view = CollectionViewSource.GetDefaultView(this.mysourcecollection)
如果您这样做,您的selecteditems将始终同步。您可以使用ICollectionView的MoveTo方法逐步浏览项目

如果您还有其他问题,请留下一些评论

编辑:

如果将datatables用作collectionsource,只需创建BindingListCollectionView类型的属性

public BindingListCollectionView MyView
{ get;set;}
以以下方式初始化datatable init BindingListCollectionView后:

 this.MyView = (BindingListCollectionView )CollectionViewSource.GetDefaultView(this.mydatatable);
然后将此视图用作datagrid的ItemsSource

<DataGrid ItemsSource="{Binding MyView}" IsSynchronizedWithCurrentItem="true" />

遗憾的是,BindingSource.Current只是一个getter-您无法设置它。啊,对了。。。我考虑过这两个选项,除了WPF Toolkit的Datagrid控件(据我所知,没有Datagridview)缺乏显示行索引整数的能力(也就是说,没有使用一些技巧),这正是Position所需要的。除非你知道一些我不知道的事情!等一下。这毕竟很简单。有一个selectedIndex函数!也返回一个整数!:数据同步的简单方法是我下面的答案。在这里,您可以很容易地说myview.MoveToPrevious()或myview.MoveToNext(),您选择的项将这样做:)WPF表单上的所有My DataGrid控件的索引设置都没有将其DataContext设置为BindingSource,其数据源设置为Datatable。你能评论一下你的答案在这种设置下是否可行吗?我理解起来有点困难。
this.MyView.MoveCurrentToFirst();
this.MyView.MoveCurrentToLast();
this.MyView.MoveCurrentToNext();
this.MyView.MoveCurrentToPrevious();
//and some other