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

C# DataGridView 動態添加列並設置寬度

     編輯:程式設計疑難解答

問題

查詢後數據綁定到 `DataGridView`,想手動定義列寬,但 `dgvEmployee.Columns[0].Width = 40` 報錯 (列不存在)。

原因

`AutoGenerateColumns = true` (默認) 時,綁定數據源後自動生成列,**但在綁定前訪問 `Columns[index]` 為空**;綁定後雖有列,但索引順序不確定。

解決方案

  1. 預先定義列 (推薦):關閉自動生成,手動添加列再綁定。

dgvEmployee.AutoGenerateColumns = false;

// 手動添加列 (對應數據源屬性名 DataPropertyName)
dgvEmployee.Columns.Add(new DataGridViewTextBoxColumn {
    Name = "colId", HeaderText = "編號", DataPropertyName = "Id", Width = 40
});
dgvEmployee.Columns.Add(new DataGridViewTextBoxColumn {
    Name = "colName", HeaderText = "姓名", DataPropertyName = "Name", Width = 80
});
// ... 其他列

// 綁定數據源
dgvEmployee.DataSource = dataTable; // 或 List
  1. 綁定後調整 (若必須自動生成):

dgvEmployee.DataSource = dataTable;
dgvEmployee.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells); // 自適應內容
// 或指定列名調整
if (dgvEmployee.Columns["Id"] != null) dgvEmployee.Columns["Id"].Width = 40;
if (dgvEmployee.Columns["Name"] != null) dgvEmployee.Columns["Name"].Width = 80;

最佳實踐

  • **始終關閉 `AutoGenerateColumns`**,在設計器或代碼中顯式定義列,確保列順序、標題、寬度、格式、只讀等完全可控。
  • 用 `DataPropertyName` 對應實體屬性/數據表列名,大小寫敏感。
  • 複雜格式 (下拉框、按鈕、圖片列) 用對應 `DataGridViewComboBoxColumn` 等類型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved