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

C# DataGridView 手動輸入數據並顯示的完整實現

     編輯:程式設計綜合問答

需求場景

WinForms 應用:一個 DataGridView 兩列,一個 TextBox 輸入數字,點擊 Button 將數字添加為新行第一列,第二列留空,實現簡單記錄器。

核心代碼實現

1. 界面設計

  • dataGridView1:預先添加兩列(DataGridViewTextBoxColumn),AllowUserToAddRows = false
  • textBox1:輸入數字
  • button1:點擊添加

2. Button Click 事件處理

private void button1_Click(object sender, EventArgs e)
{
    // 1. 獲取並驗證輸入
    string input = textBox1.Text.Trim();
    if (string.IsNullOrEmpty(input))
    {
        MessageBox.Show("請輸入數字");
        return;
    }
    
    if (!decimal.TryParse(input, out _))
    {
        MessageBox.Show("請輸入有效數字");
        return;
    }

    // 2. 添加新行並獲取行索引
    int rowIndex = dataGridView1.Rows.Add();
    DataGridViewRow newRow = dataGridView1.Rows[rowIndex];

    // 3. 設置單元格值
    newRow.Cells[0].Value = input;      // 第一列:輸入的數字
    newRow.Cells[1].Value = string.Empty; // 第二列:留空

    // 4. 清空輸入框並聚焦
    textBox1.Clear();
    textBox1.Focus();

    // 5. 可選:自動滾動到新行
    dataGridView1.FirstDisplayedScrollingRowIndex = rowIndex;
}

3. 進階增強:綁定數據源(推薦)

// 定義數據模型
public class RecordItem
{
    public string Number { get; set; }
    public string Remark { get; set; }
}

// 窗體字段
private BindingList records = new BindingList();

// 初始化綁定
private void Form1_Load(object sender, EventArgs e)
{
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = records;
    
    // 假設兩列 DataPropertyName 分別為 "Number" 和 "Remark"
}

// Button 事件(綁定模式)
private void button1_Click(object sender, EventArgs e)
{
    if (decimal.TryParse(textBox1.Text.Trim(), out _))
    {
        records.Add(new RecordItem { Number = textBox1.Text.Trim(), Remark = "" });
        textBox1.Clear();
        textBox1.Focus();
    }
}

關鍵屬性設置

屬性建議值說明
AllowUserToAddRowsfalse禁用底部新行佔位符
AutoGenerateColumnsfalse手動定義列,配合 DataPropertyName
SelectionModeFullRowSelect整行選中
ReadOnlytrue/false按需設置,手動添加行建議 false
EditModeEditOnEnter方便直接編輯

常見問題與解決

問題 1:Rows.Add() 返回值用法

// ❌ 錯誤:Rows.Add() 返回 int (新行索引),不是 Row 對象
DataGridViewRow row = dataGridView1.Rows.Add(); 

// ✅ 正確:先 Add 獲取索引,再通過索引取行
int idx = dataGridView1.Rows.Add();
DataGridViewRow row = dataGridView1.Rows[idx];

問題 2:Cells 索引越界

  • 確認列數:dataGridView1.Columns.Count == 2
  • 索引從 0 開始:Cells[0]、Cells[1]

問題 3:數據類型不匹配

  • Value 接受 object,字符串、數字均可
  • 若列綁定 DataPropertyName 為數值類型,賦值字符串會自動轉換或報錯

完整示例下載

可從此處下載完整 VS 解決方案:
DataGridView手動添加行演示

綁定模式(BindingList)優於直接操作 Rows:分離數據與視圖,支持排序、篩選、雙向同步,代碼更簡潔且易維護。新手建議直接掌握綁定模式。

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