如何:在 Windows 窗体中导航数据
在 Windows 应用程序中,在数据源中浏览记录的最简单方法是将 BindingSource 组件绑定到数据源,然后将控件绑定到 BindingSource。 然后,可以在 BindingSource 上使用内置导航方法,例如 MoveNext、MoveLast、MovePrevious 和 MoveFirst。 使用这些方法会相应地调整 BindingSource 的 Position 和 Current 属性。 还可以通过设置 Position 属性找到一个项并将其设置为当前项。
递增数据源中的位置
将绑定数据的 BindingSource 的 Position 属性设置为转到的记录位置。 以下示例演示了在单击
nextButton
时使用 BindingSource 的 MoveNext 方法递增 Position 属性。 BindingSource 与数据集Northwind
的Customers
表关联。注意
将 Position 属性设置为第一个或最后一个记录之外的值不会导致错误,因为 .NET Framework 不允许将位置设置为列表边界之外的值。 如果必须在应用程序中知道是否已超过第一条或最后一条记录,请包含用于测试是否会超过数据元素计数的逻辑。
private void nextButton_Click(object sender, System.EventArgs e) { this.customersBindingSource.MoveNext(); }
Private Sub nextButton_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles nextButton.Click Me.customersBindingSource.MoveNext() End Sub
检查是否越过了开头或结尾
为 PositionChanged 事件创建一个事件处理程序。 在处理程序中,可以测试建议的位置值是否超过了实际的数据元素计数。
以下示例演示如何测试是否已达到最后一个数据元素。 在该示例中,如果位于最后一个元素,则窗体上的“下一个”按钮处于禁用状态。
注意
请注意,如果在代码中更改导航的列表,则应重新启用“下一个”按钮,以便用户可以浏览整个新列表。 此外,请注意,你正在使用的特定 BindingSource 的上述 PositionChanged 事件需要与其事件处理方法关联。 下面是处理 PositionChanged 事件的方法示例:
void customersBindingSource_PositionChanged(object sender, EventArgs e) { if (customersBindingSource.Position == customersBindingSource.Count - 1) nextButton.Enabled = false; else nextButton.Enabled = true; }
Sub customersBindingSource_PositionChanged(ByVal sender As Object, _ ByVal e As EventArgs) If customersBindingSource.Position = _ customersBindingSource.Count - 1 Then nextButton.Enabled = False Else nextButton.Enabled = True End If End Sub
查找项并将其设置为当前项
查找要设置为当前项的记录。 如果数据源实现 IBindingList,你可以使用 BindingSource 的 Find 方法执行此操作。 实现 IBindingList 的一些数据源示例包括 BindingList<T> 和 DataView。
void findButton_Click(object sender, EventArgs e) { int foundIndex = customersBindingSource.Find("CustomerID", "ANTON"); customersBindingSource.Position = foundIndex; }
Sub findButton_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles findButton.Click Dim foundIndex As Integer = customersBindingSource.Find("CustomerID", _ "ANTON") customersBindingSource.Position = foundIndex End Sub