實現步驟
- 訂閱 CellClick 事件(或 `RowHeaderMouseClick`、`CellDoubleClick`):
```vb
Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
If e.RowIndex < 0 Then Return ' 點擊表頭不處理
Dim tableName = DataGridView1.Rows(e.RowIndex).Cells("TableNameColumn").Value.ToString()
' 或用主鍵 ID
Dim detailForm As New DetailForm(tableName)
detailForm.ShowDialog()
End Sub
```
- 詳情頁構造函數接收參數:
```vb
Public Sub New(ByVal tableName As String)
InitializeComponent()
Me._tableName = tableName
LoadData()
End Sub
```
- 詳情頁根據參數查詢綁定:
```vb
Private Sub LoadData()
Dim sql = "SELECT * FROM " & _tableName
' 參數化查詢、綁定 DataGridView2
End Sub
```
表單傳值參考
更多傳值方式(構造函數、屬性、公共模塊、事件)可參考:
VB.NET 表單傳值總結
注意點
- 防 SQL 注入:表名無法參數化,需白名單驗證 `tableName`;
- 異步加載:大數據量時用 `BackgroundWorker` 或 `Task.Run` 避免 UI 卡頓;
- 關閉詳情頁後刷新列表:在 `FormClosed` 事件中通知主頁重新查詢。