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

WinForms DataGridView 不顯示 DataSet 資料:DataSource 指派錯誤排查

     編輯:程式設計綜合問答

錯誤程式碼


DataSet DS = DataOperate.DS(SQL_C);
DataGridView DGV = new DataGridView();  // 新建未加入表單的實例
DGV.DataSource = DS;
dataGridView1.DataSource = DS;  // 介面上的控制項

根本原因

DataSet 包含多個 DataTable,`DataGridView` 無法自動決定顯示哪個 Table。必須指定 `DataMember` 或直接指派 `DataTable`。

三種修正方式

方法一:指定 DataTable(推薦)


dataGridView1.DataSource = DS.Tables[0];  // 直接繫結第一個表
// 或
dataGridView1.DataSource = DS.Tables["TableName"];  // 指定表名

方法二:設定 DataMember


dataGridView1.DataSource = DS;
dataGridView1.DataMember = "TableName";  // 或 Tables[0].TableName

方法三:使用 DataAdapter 填充 DataTable 直接繫結


DataTable dt = new DataTable();
using (var da = new SqlDataAdapter(cmd)) {
    da.Fill(dt);
}
dataGridView1.DataSource = dt;  // 最輕量、效能最佳

常見陷阱檢查清單

  • ✅ `dataGridView1` 已加入表單 Controls 集合
  • ✅ `DS.Tables.Count > 0` 且 `DS.Tables[0].Rows.Count > 0`
  • ✅ 未設定 `AutoGenerateColumns = false` 且未手動定義 Columns
  • ✅ 資料類型相容(如 `DateTime`、`Decimal` 正確對應)

進階:虛擬模式處理大量資料


dataGridView1.VirtualMode = true;
dataGridView1.CellValueNeeded += (s, e) => {
    e.Value = dt.Rows[e.RowIndex][e.ColumnIndex];
};
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved