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