方法: Windows フォームでデータ間を移動する
Windows アプリケーションでは、データ ソース内のレコード間を移動する最も簡単な方法は、BindingSource コンポーネントをデータ ソースにバインドした後、コントロールを BindingSource にバインドすることです。 その後、BindingSource に対して組み込みのナビゲーション メソッドを使用できます (MoveNext、MoveLast、MovePrevious、MoveFirst など)。 これらのメソッドを使用すると、BindingSource の Position プロパティと Current プロパティが適切に調整されます。 また、項目を検索し、Position プロパティを設定することで、その項目を現在の項目として設定することもできます。
データ ソース内の位置をインクリメントするには
バインドされたデータの BindingSource の Position プロパティを、移動先のレコード位置に設定します。 次の例は、BindingSource の MoveNext メソッドを使用して、
nextButton
がクリックされたときに 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
関連項目
.NET Desktop feedback