首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# DataGridView 禁止顯示新行 (允許用戶添加行) 完整指南

     編輯:程式設計疑難解答

現象解析

DataGridView 底部出現的「空白行」實際上是 **「新記錄輸入行」**,由屬性 AllowUserToAddRows = true (預設) 控制。這是為了方便用戶直接在表格末尾新增數據的設計,而非 Bug。

解決方案

方案一:完全禁用 (最簡單)

若不需要用戶在界面直接新增行:

// 設計器屬性窗口 或 代碼中
dataGridView1.AllowUserToAddRows = false;

方案二:按鈕控制新增模式 (業務常見需求)

「平時隱藏空白行,點擊『新增』按鈕時顯示,提交後隱藏」。

// 1. 窗體載入時初始化禁用
private void Form_Load(object sender, EventArgs e) {
    dataGridView1.AllowUserToAddRows = false;
}

// 2. 「新增」按鈕點擊事件
private void btnAdd_Click(object sender, EventArgs e) {
    dataGridView1.AllowUserToAddRows = true;
    // 可選:自動滾動到新行並進入編輯狀態
    dataGridView1.FirstDisplayedScrollingRowIndex = dataGridView1.Rows.Count - 1;
    dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];
    dataGridView1.BeginEdit(true);
}

// 3. 利用 RowsAdded 事件:用戶輸入完畢離開新行時,自動關閉新增模式
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) {
    // 只有當 AllowUserToAddRows 為 true 且新增的是「新記錄行」時處理
    if (dataGridView1.AllowUserToAddRows && e.RowIndex == dataGridView1.Rows.Count - 1) {
        // 這裡可以不立即關閉,等用戶點「保存」或驗證通過後關閉
        // 若想輸入一行就關閉:
        // dataGridView1.AllowUserToAddRows = false; 
    }
}

// 4. 「保存/提交」按鈕:驗證數據 -> 入庫 -> 關閉新增行
private void btnSave_Click(object sender, EventArgs e) {
    if (ValidateInput()) {
        SaveToDatabase();
        dataGridView1.AllowUserToAddRows = false; // 關鍵:恢復禁用
        RefreshGrid(); // 重新綁定數據源顯示最新數據
    }
}

避坑指南

  • 數據綁定時: 若綁定 BindingList 或 DataTable,新增行會自動添加到數據源。禁用屬性僅影響 UI 顯示,不影響代碼 list.Add(new Item())。
  • 驗證時機: 在 RowValidating 事件中驗證新行數據,失敗時 e.Cancel = true 可阻止用戶離開該行。
  • 外觀微調: 即使 AllowUserToAddRows=true,可通過 dataGridView1.Rows[dataGridView1.NewRowIndex].Visible = false 隱藏 (不推薦,易出錯),不如屬性切換乾淨。

總結

理解「新記錄行」本質,靈活切換 AllowUserToAddRows 配合 RowsAdded/RowValidating 事件,即可實現專業級的表格交互體驗。

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