使用Datagrid的SelectedItem属性更新BindingSource的Current属性?

时间:2011-04-28 11:11:20

标签: c# wpf datagrid highlight bindingsource

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

我这样做是错误的吗?我只是希望datagrid突出显示操作后的下一行(例如更新我点击的行),但Datagrid似乎没有提供这样做的方法,而且我还处理BindingSource。

2 个答案:

答案 0 :(得分:0)

当您点击DataGridView中的特定行时,将Position对象的BindingSource属性设置为适当的值,而不是为DataGridView指定选定的行

答案 1 :(得分:0)

如果您希望数据网格和集合同步,则必须为数据网格设置IsSynchronizedWithCurrentItem = true。您的集合应该是ICollectionView或BindingListCollectionView类型。你可以用

来实现这个目标
this.view = CollectionViewSource.GetDefaultView(this.mysourcecollection)

如果你这样做,你的选择项总是同步的。并且您可以使用ICollectionView的MoveTo -methods来逐步浏览您的项目。

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

编辑:

如果你使用datatables作为集合源,只需创建一个BindingListCollectionView类型的属性。

public BindingListCollectionView MyView
{ get;set;}

以这种方式初始化数据表init之后的BindingListCollectionView:

 this.MyView = (BindingListCollectionView )CollectionViewSource.GetDefaultView(this.mydatatable);

然后只需将此视图用作datagrid的ItemsSource

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

你现在可以做的就是打电话:

this.MyView.MoveCurrentToFirst();
this.MyView.MoveCurrentToLast();
this.MyView.MoveCurrentToNext();
this.MyView.MoveCurrentToPrevious();
//and some other