方法 : 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 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 を実装しているデータ ソースの場合には、BindingSource の Find メソッドを使用して検索を実行できます。 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; }