您根本不应该在代码中使用网格。您应该完全按照BindingNavigator 所做的那样做,即使用BindingSource。 BindingNavigator 只是 BindingSource 的 UI,特别是 MoveFirst、MovePrevious、Position、Count、MoveNext 和 MoveLast 成员。如果您想创建自己的 UI,那么您可以为相同的成员创建,或者至少为您想要公开的成员创建。例如,如果您只想按记录向前和向后移动,那么您只需要调用 MovePrevious 和 MoveNext 方法:
Private Sub movePreviousButton_Click(sender As Object, e As EventArgs) Handles movePreviousButton.Click
myBindingSource.MovePrevious()
End Sub
Private Sub moveNextButton_Click(sender As Object, e As EventArgs) Handles moveNextButton.Click
myBindingSource.MoveNext()
End Sub
我不是 100% 确定,但我认为如果没有上一个或下一个记录可以移动,这些方法将根本不起作用,但你应该测试一下。无论哪种方式,如果 Button 不能做任何有用的事情,最好禁用它:
Private Sub movePreviousButton_Click(sender As Object, e As EventArgs) Handles movePreviousButton.Click
myBindingSource.MovePrevious()
SetNavigationButtonStates()
End Sub
Private Sub moveNextButton_Click(sender As Object, e As EventArgs) Handles moveNextButton.Click
myBindingSource.MoveNext()
SetNavigationButtonStates()
End Sub
Private Sub SetNavigationButtonStates()
movePreviousButton.Enabled = (myBindingSource.Position > 0)
moveNextButton.Enabled = (myBindingSource.Position < myBindingSource.Count - 1)
End Sub
您也不应该在网格和其他控件之间手动移动数据。您也应该绑定到这些控件,例如
myBindingSource.DataSource = myDataTable
myDataGridView.DataSource = myBindingSource
myTextBox.DataBindings.Add("Text", myBindingSource, "SomeColumn")
然后您的TextBox 将自动显示当前行中的SomeColumn 值。通过TextBox 完成的任何编辑也将自动推送到数据源。