如何:巡覽 Windows Form 中的資料
在 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 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