用戶在 dataGridView1 輸入/編輯數據後,dataGridView2 實時顯示相同數據(或經過轉換的視圖)。
DataGridView 的 DataSource 屬性接受任何實現 IList/IBindingList 的對象。**讓兩個 Grid 綁定同一個 BindingList<T> 或 DataTable 實例**,即可實現零代碼同步。
// 1. 定義實體類
public class RowData {
public int Id { get; set; }
public string Name { get; set; }
public decimal Amount { get; set; }
}
// 2. 窗體構造/載入時初始化共享數據源
private BindingList sharedSource = new BindingList();
private void Form1_Load(object sender, EventArgs e) {
// 測試數據
sharedSource.Add(new RowData { Id = 1, Name = "項目A", Amount = 100 });
// 關鍵:兩個 Grid 綁定同一個對象
dataGridView1.DataSource = sharedSource;
dataGridView2.DataSource = sharedSource;
// 可選:針對 Grid2 只顯示特定列
dataGridView2.AutoGenerateColumns = false;
dataGridView2.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "Name", HeaderText = "名稱" });
dataGridView2.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "Amount", HeaderText = "金額" });
}
DataTable 為源時,創建 DataView dv = table.DefaultView; dv.RowFilter = "Amount > 100"; grid2.DataSource = dv; — 仍共享底層數據,修改雙向同步。bs1.DataSource = sharedList; bs2.DataSource = sharedList; grid1.DataSource = bs1; grid2.DataSource = bs2; — 可獨立排序/過濾/當前行,不影響彼此,但數據修改仍同步。grid2.DataSource = new List(sharedSource); 會斷開引用,修改不同步。Rows.Add() 而不設置 DataSource,無法利用數據綁定機制。**「單一數據源、多視圖綁定」** 是 WinForms 數據同步的核心模式。共享 BindingList<T> 或 DataTable,配合 BindingSource 實現視圖級差異,即可輕鬆實現多 Grid 聯動。