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

C# DataGridView CellClick 異常:斷點定位 ds.Tables[0].Rows[0]["病案號"] 空引用或列名不匹配

     編輯:程式設計綜合問答

錯誤堆疊指向 `CellClick` 事件中 `ds.Tables[0].Rows[0]["病案號"].ToString()`。兩大可能:DataTable 無行、列名大小寫/空格不匹配。

極速定位法

  1. 在報錯行打斷點(F9)。
  2. Debug 運行,觸發點擊。
  3. 懸停查看 `ds`、`ds.Tables[0]`、`Rows.Count`、`Columns` 集合。

常見問題對照

現象原因修正
`Rows.Count == 0`SQL 查無數據 / 參數錯誤點擊前判斷 `if (ds.Tables[0].Rows.Count > 0)`
列名實為 `病案号`(简体)資料庫列名與代碼不一致用 `Columns["病案号"]` 或 `Columns[0]` 索引
值為 `DBNull.Value`字段允許 NULL`Convert.ToString(row["病案號"])` 安全處理
多表查詢導致列名重複未起別名SQL 用 `AS` 別名:`SELECT t1.病案號 AS case_no ...`

健壯代碼模板

private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e) {
    if (e.RowIndex < 0) return; // 標題行
    var row = dataGridView.Rows[e.RowIndex];
    var cell = row.Cells["病案號"]; // 建議用 DataPropertyName 綁定列名
    string caseNo = cell?.Value?.ToString() ?? "";
    if (string.IsNullOrEmpty(caseNo)) return;
    // 後續業務...
}

**核心原則**:UI 事件處理器要**防禦性編程**,假設數據隨時可能為空、類型不符、結構變化。

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