Обновление текущего свойства BindingSource с помощью свойства SelectedItem в Datagrid? - PullRequest
1 голос
/ 28 апреля 2011

Есть ли способ синхронизировать текущее свойство элемента BindingSource с выбранным элементом Datagrid? Например, я нажимаю на строку 10 в Datagrid, когда я нажимаю кнопку, чтобы вызвать BindingSource.MoveNext (), а затем устанавливаю Datagrid.SelectedItem с BindingSource.Current; выделенная строка - это строка 2 вместо 11.

Я делаю это неправильно? Я просто хочу, чтобы datagrid выделил следующую строку после операции (например, при обновлении строки, по которой я щелкнул), но Datagrid, похоже, не предлагает способа сделать это, и мне остается иметь дело с BindingSource.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2011

Если вы хотите, чтобы ваша сетка данных и ваша коллекция были синхронизированы, вы должны установить IsSynchronizedWithCurrentItem = true для вашей сетки данных.Ваша коллекция должна иметь тип ICollectionView или BindingListCollectionView.Вы можете достичь этого с помощью

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

, если вы сделаете это, выбранные вами элементы всегда синхронизируются.И вы можете использовать методы MoveTo вашего ICollectionView для пошагового просмотра ваших элементов.

если у вас есть дополнительные вопросы, просто оставьте несколько комментариев

РЕДАКТИРОВАТЬ:

, если вы используетеdatatables в качестве источника коллекций просто создают свойство типа 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 голосов
/ 28 апреля 2011

При нажатии на конкретную строку в DataGridView задайте для свойства Position объекта BindingSource соответствующее значение вместо назначения выбранной строки для DataGridView.

...