首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

DataGridView CheckBox 實現單列單選功能完整代碼解析

     編輯:ASP.NET 基礎

需求場景

在 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 列導致異常。
  • 效能考量: 對於數萬行數據,遍歷重置可能有延遲,可考慮記錄「上一次選中行索引」直接重置該行,將複雜度從 O(n) 降為 O(1)。

進階擴展建議

  1. 綁定數據源時同步: 若使用 DataTable 或實體列表綁定,建議在數據源層面維護「IsSelected」欄位,UI 僅反映數據狀態,避免 UI 與數據不一致。
  2. 鍵盤支援: 結合 KeyDown 事件處理空格鍵選中,提升無障礙體驗。
  3. 樣式反饋: 透過 CellPainting 自繪高亮選中行,增強視覺提示。

此方案代碼精簡、邏輯清晰,適用於中小數據量場景的單選需求,是 WinForms 開發中常見的實用技巧。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved