如何:在 Windows 窗体中导航数据

在 Windows 应用程序中,在数据源中浏览记录的最简单方法是将 BindingSource 组件绑定到数据源,然后将控件绑定到 BindingSource。 然后,可以在 BindingSource 上使用内置导航方法,例如 MoveNextMoveLastMovePreviousMoveFirst。 使用这些方法会相应地调整 BindingSourcePositionCurrent 属性。 还可以通过设置 Position 属性找到一个项并将其设置为当前项。

递增数据源中的位置

  1. 将绑定数据的 BindingSourcePosition 属性设置为转到的记录位置。 以下示例演示了在单击 nextButton 时使用 BindingSourceMoveNext 方法递增 Position 属性。 BindingSource 与数据集 NorthwindCustomers 表关联。

    注意

    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
    

检查是否越过了开头或结尾

  1. 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
    

查找项并将其设置为当前项

  1. 查找要设置为当前项的记录。 如果数据源实现 IBindingList,你可以使用 BindingSourceFind 方法执行此操作。 实现 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
    

另请参阅