2011-04-28 69 views
0

有沒有一種方法來同步BindingSource的當前項目屬性與Datagrid的選定項目?例如,我點擊Datagrid中的第10行,當我按下一個按鈕來調用BindingSource.MoveNext(),然後用BindingSource.Current設置Datagrid.SelectedItem;突出顯示的行是第2行而不是11.使用Datagrid的SelectedItem屬性更新BindingSource的當前屬性?

我在做這個錯誤的方法嗎?我只想讓datagrid在操作之後突出顯示下一行(比如更新我點擊的那一行),但Datagrid似乎沒有提供這樣做的方法,而且我還處理了BindingSource。

回答

0

當您單擊DataGridView中的特定行時,將BindingSource對象的Position屬性設置爲適當的值,而不是爲DataGridView分配選定的行。

+0

不幸的是,BindingSource.Current只是一個getter - 你不能設置它。 – MHTri 2011-04-28 11:27:50

+0

對不起,我的意思是位置..編輯我的答案.. – 2011-04-28 11:30:06

+0

啊右...我已經考慮了這兩個選項,除了WPF工具包的Datagrid控件(根據我的知識,沒有Datagridview)缺乏顯示行索引整數(沒有使用一些黑客,也就是),這是Position所要求的。除非你知道我沒有的東西! – MHTri 2011-04-28 11:32:13

0

如果你想讓你的數據網格和你的集合同步,你必須爲你的數據網格設置IsSynchronizedWithCurrentItem = true。你的集合應該是ICollectionView或BindingListCollectionView類型。您可以使用

this.view = CollectionViewSource.GetDefaultView(this.mysourcecollection) 

如果您這樣做,則您選擇的項目始終保持同步。你可以使用你的ICollectionView的MoveTo方法來遍歷你的項目。

,如果您還有其他問題,只留下一些評論

編輯:

如果你使用數據表作爲collectionsource只是創建類型BindingListCollectionView的屬性

public BindingListCollectionView MyView 
{ get;set;} 

初始化數據表中的init的BindingListCollectionView以這種方式後:

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

就用這個視圖的ItemsSource爲您的數據網格

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

你現在能做的就是調用:

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

我的WPF窗體上的DataGrid控件將其DataContext設置爲BindingSource,其數據源被設置到Datatable。你能評論一下你的答案是否可以用這個設置,我有點難以理解它。 – MHTri 2011-04-28 11:30:12

+0

我也在我的項目中使用數據表,我會編輯我的答案。 – blindmeis 2011-04-28 11:55:50

相關問題