在 Windows Forms 應用中,DataGridView 常用於展示表格數據。當第一列為 CheckBox 列時,業務常要求實現「單選」邏輯:用戶點擊某行的 CheckBox,該行選中,其餘行自動取消選中,確保同一時間僅有一行處於選中狀態。
利用 CellClick 事件,判斷點擊列索引為 0(第一列)時,遍歷所有行將 CheckBox 值重置為 false,再將當前點擊行的值設為 true。
private void dgvChannel_CellClick(object sender, DataGridViewCellEventArgs e)
{
// 排除標題列點擊(RowIndex = -1)及無效列索引
if (e.ColumnIndex == -1 || e.RowIndex == -1) return;
// 僅處理第一列(索引 0)的點擊
if (e.ColumnIndex == 0)
{
// 先將所有行的 CheckBox 重置為未選中
foreach (DataGridViewRow row in dgvChannel.Rows)
{
var checkCell = row.Cells[0] as DataGridViewCheckBoxCell;
if (checkCell != null)
checkCell.Value = false;
}
// 再將當前點擊行設為選中
var currentCheckCell = dgvChannel.Rows[e.RowIndex].Cells[0] as DataGridViewCheckBoxCell;
if (currentCheckCell != null)
currentCheckCell.Value = true;
}
}
ColumnIndex 和 RowIndex 避免標題列或空白區域點擊報錯。as 操作符並判斷非 null,防止非 CheckBox 列導致異常。DataTable 或實體列表綁定,建議在數據源層面維護「IsSelected」欄位,UI 僅反映數據狀態,避免 UI 與數據不一致。KeyDown 事件處理空格鍵選中,提升無障礙體驗。CellPainting 自繪高亮選中行,增強視覺提示。此方案代碼精簡、邏輯清晰,適用於中小數據量場景的單選需求,是 WinForms 開發中常見的實用技巧。