所有繫結同一資料來源的控制項,共享一個 BindingManagerBase (透過 Form.BindingContext[dataSource, dataMember] 取得)。改變其 Position 即可同步移動所有繫結控制項的顯示列。
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb";
OleDbConnection conn = new OleDbConnection(connStr);
string sql = "SELECT * FROM person";
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
da.Fill(ds, "person");
conn.Close();
myBind = this.BindingContext[ds, "person"]; // 關鍵:取得繫結管理器
string connStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=data1;Data Source=server1";
OleDbConnection conn = new OleDbConnection(connStr);
conn.Open();
string sql = "SELECT * FROM person";
DataSet ds = new DataSet();
OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
da.Fill(ds, "person");
conn.Close();
myBind = this.BindingContext[ds, "person"];
| 按鈕 | 程式碼 | 邏輯 |
|---|---|---|
| 上一筆 | if (myBind.Position == 0) MsgBox("已是第一筆"); else myBind.Position--; | 避免負索引 |
| 下一筆 | if (myBind.Position == myBind.Count - 1) MsgBox("已是最後一筆"); else myBind.Position++; | 避免越界 |
| 最末筆 | myBind.Position = myBind.Count - 1; | 直接跳至最後 |
| 最前筆 | myBind.Position = 0; | 直接跳至第一筆 |
myBind.Count 回傳資料列總數,用於邊界判斷。
DataSource 與 DataMember,才能共享同一 BindingManagerBasePositionChanged 事件可用於狀態列顯示「第 N 筆 / 共 M 筆」Count 與 Position 會自動調整