When applying a sort to a Database BindingSource, executing the BindingSource.EndEdit method causes the currently selected row to change.
This has the effect of reloading any bound controls when tee edited row is saved, which of course can have unwanted effects if you need to operating on data related to the currently selected row after the EndEdit has been performed.
This issue can also be observed to a degree by selecting a row in a bound DataGrid, then choose the sorted column. It can be seen that the physical location of the selected row doesn’t change, however the previously selected row has now moved.
There are a number of ways to deal with the EndEdit issue, one of which I found here…
Where we check the ListChanged event and the e.ListChangeType;
Private Sub bsBindingSource_ListChanged(ByVal sender As Object, ByVal e _
As System.ComponentModel.ListChangedEventArgs) Handles _
bsBindingSource.ListChanged
If e.ListChangedType = _
System.ComponentModel.ListChangedType.ItemMoved Then
bsBindingSource.Position = e.NewIndex
End If
End Sub
Another method is to store the current state of the form, i.e. editing, adding, duplicating, normal etc in an enum. then use the following code;
Private Sub bsBindingSource_ListChanged(ByVal sender As Object, ByVal e _
As System.ComponentModel.ListChangedEventArgs) Handles _
bsBindingSource.ListChanged
If sttCurrentFormState = Normal Then
bsBindingSource.Position = e.NewIndex
End If
End Sub
No comments:
Post a Comment