主窗體查詢數據庫,將結果傳遞給子窗體的 DataGridView 顯示。
// CommonData.cs
public static class CommonData {
public static DataTable QueryResult { get; set; }
}
// 主窗體
CommonData.QueryResult = dt; // 查詢後賦值
var child = new ChildForm();
child.Show();
// 子窗體 Load 事件
dataGridView1.DataSource = CommonData.QueryResult;
缺點:全局狀態,多實例並發時數據競爭,單元測試困難。
// 子窗體
public partial class ChildForm : Form {
public DataTable DataSource { get; set; }
public ChildForm() { InitializeComponent(); }
private void ChildForm_Load(object sender, EventArgs e) {
if (DataSource != null) dataGridView1.DataSource = DataSource;
}
}
// 主窗體
var child = new ChildForm { DataSource = dt };
child.Show();
優點:依賴顯式、易測試、支持多實例隔離。
// 主窗體定義事件
public event Action<DataTable> OnDataReady;
// 子窗體訂閱
mainForm.OnDataReady += dt => {
if (InvokeRequired) Invoke(new Action(() => dataGridView1.DataSource = dt));
else dataGridView1.DataSource = dt;
};
// 主窗體查詢完成後觸發
OnDataReady?.Invoke(dt);
適用於異步查詢、多窗體同步更新場景。