方法: Windows フォームでデータ間を移動する

Windows アプリケーションでは、データ ソース内のレコード間を移動する最も簡単な方法は、BindingSource コンポーネントをデータ ソースにバインドした後、コントロールを BindingSource にバインドすることです。 その後、BindingSource に対して組み込みのナビゲーション メソッドを使用できます (MoveNextMoveLastMovePreviousMoveFirst など)。 これらのメソッドを使用すると、BindingSourcePosition プロパティと Current プロパティが適切に調整されます。 また、項目を検索し、Position プロパティを設定することで、その項目を現在の項目として設定することもできます。

データ ソース内の位置をインクリメントするには

  1. バインドされたデータの BindingSourcePosition プロパティを、移動先のレコード位置に設定します。 次の例は、BindingSourceMoveNext メソッドを使用して、nextButton がクリックされたときに 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
    

関連項目