Share via


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

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

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

  • バインドされているデータの BindingSourcePosition プロパティを、移動先のレコード位置に設定します。 次に示す例では、nextButton がクリックされたときに、BindingSourceMoveNext メソッドを使用して Position プロパティをインクリメントします。 BindingSource は、データセット Northwind の Customers テーブルに関連付けられています。

    注意

    Position プロパティを最初または最後のレコードを超える値に設定してもエラーにはなりません。これは、.NET Framework では位置をリストの範囲外の値に設定できないためです。 アプリケーションで最初または最後のレコードを超えたかどうかを知る必要がある場合は、データ要素数を超えるかどうかをテストするロジックを追加します。

    Private Sub nextButton_Click(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles nextButton.Click
        Me.customersBindingSource.MoveNext()
    End Sub
    
    private void nextButton_Click(object sender, System.EventArgs e)
    {
        this.customersBindingSource.MoveNext();
    }
    

最初または最後を超えたかどうかを確認するには

  • PositionChanged イベントのイベント ハンドラーを作成します。 このハンドラーで、指定された位置の値が実際のデータ要素数を超えているかどうかをテストできます。

    最後のデータ要素に達したかどうかをテストする方法の例を次に示します。 この例では、最後の要素に達している場合は、フォームの [Next] ボタンが無効になります。

    注意

    コード内を移動するリストを変更する場合は、ユーザーが新しいリスト全体を移動できるように、[次へ] ボタンをもう一度有効にする必要があるので注意してください。 また、扱う対象となる特定の BindingSource の上記の PositionChanged イベントを、イベント処理メソッドと関連付ける必要がある点にも注意してください。 PositionChanged イベントを処理するメソッドの例を次に示します。

    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
    
    void customersBindingSource_PositionChanged(object sender, EventArgs e)
    {
        if (customersBindingSource.Position == customersBindingSource.Count - 1)
            nextButton.Enabled = false;
        else
            nextButton.Enabled = true;
    }
    

項目を検索し、現在の項目として設定するには

  • 現在の項目として設定するレコードを検索します。 IBindingList を実装しているデータ ソースの場合には、BindingSourceFind メソッドを使用して検索を実行できます。 IBindingList を実装しているデータ ソースの例としては、BindingList<T> および DataView があります。

    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
    
    void findButton_Click(object sender, EventArgs e)
    {
        int foundIndex = customersBindingSource.Find("CustomerID", "ANTON");
        customersBindingSource.Position = foundIndex;
    }
    

参照

概念

Windows フォームがサポートするデータ ソース

Windows フォーム データ バインディングの変更通知

データ連結と Windows フォーム

その他の技術情報

Windows フォームでのデータ バインディング