首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

DataGridView 進階操作全攻略:18 個實用技巧一次掌握

     編輯:關於C#

DataGridView 是 Windows Forms 中最強大、彈性最高的資料呈現控制項,但功能豐富也意味著學習曲線較陡峭。本文整理 18 個實務常用技巧,涵蓋資料存取、外觀客製、效能優化、資料驗證等面向,助您快速掌握核心用法。

基礎資料存取

0. 取得特定儲存格的值

int pos = dataGridView1.BindingContext[dataGridView1.DataSource, dataGridView1.DataMember].Position;
string value = dataGridView1.Rows[pos].Cells[21].Value?.ToString().Trim();

欄位與外觀客製化

1. 自訂欄寬

dataGridView1.Columns[0].Width = 80;
dataGridView1.Columns[1].Width = 180;

2. 自動調整欄寬/列高

// 依標題與顯示列調整所有欄
dataGridView1.AutoSizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);

// 單一欄/列調整
dataGridView1.AutoSizeColumn(2, DataGridViewAutoSizeColumnMode.HeaderOnly);
dataGridView1.AutoSizeRow(2, DataGridViewAutoSizeRowMode.AllHeaders);

3. 繫結自訂物件集合

直接指定 DataSource = List<T>,欄位自動對應公開屬性,亦可搭配 AutoGenerateColumns = false 手動定義欄位。

4. 變更框線與格線樣式


dataGridView1.GridColor = Color.BlueViolet;
dataGridView1.BorderStyle = BorderStyle.Fixed3D;
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
dataGridView1.RowHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
dataGridView1.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;

5. 動態控制欄位可見度與顯示順序


dataGridView1.Columns["CustomerID"].Visible = false;
dataGridView1.Columns["ContactName"].DisplayIndex = 0;
dataGridView1.Columns["City"].DisplayIndex = 1;

6. 欄位顯示圖示


var imgCol = new DataGridViewImageColumn();
imgCol.Image = new Icon(GetType(), "tree.ico").ToBitmap();
imgCol.Name = "Tree";
imgCol.HeaderText = "Nice tree";
dataGridView1.Columns.Insert(2, imgCol);

7. 格式化顯示內容


dataGridView1.Columns["UnitPrice"].DefaultCellStyle.Format = "c"; // 貨幣
dataGridView1.Columns["ShipDate"].DefaultCellStyle.Format = "d";  // 短日期
dataGridView1.DefaultCellStyle.NullValue = "no entry";
dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.Columns["CustomerName"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

8. 凍結欄位


dataGridView1.Columns["AddToCartButton"].Frozen = true; // 該欄及左側欄位固定

選取與編輯模式

9. 取得選取的儲存格、列、欄

使用 SelectedCells、SelectedRows、SelectedColumns 集合,詳細用法請參考 MSDN 文件。

10. 資料輸入錯誤處理


private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
    if (e.Exception != null && e.Context == DataGridViewDataErrorContext.Commit)
        MessageBox.Show("CustomerID 值必須唯一。");
}

11. 大量資料使用虛擬模式

設定 VirtualMode = true,並處理 CellValueNeeded、CellValuePushed 事件,僅在需要時載入資料,大幅降低記憶體佔用。

12. 設定欄位唯讀


dataGridView1.Columns["CompanyName"].ReadOnly = true;

13. 移除自動產生的欄位


dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dataSet;
dataGridView1.Columns.Remove("Fax"); // 或設 Visible = false

14. 自訂選取模式


dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.MultiSelect = false;

15. 設定編輯模式


dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter; // 進入儲存格即進入編輯

資料驗證與提交

16. 新列預設值


private void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
    e.Row.Cells["Region"].Value = "WA";
    e.Row.Cells["City"].Value = "Redmond";
    e.Row.Cells["PostalCode"].Value = "98052-6399";
    e.Row.Cells["Country"].Value = "USA";
}

17. 儲存格層級驗證


private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    if (dataGridView1.Columns[e.ColumnIndex].Name == "CompanyName")
    {
        if (string.IsNullOrEmpty(e.FormattedValue?.ToString()))
        {
            dataGridView1.Rows[e.RowIndex].ErrorText = "Company Name 不可為空";
            e.Cancel = true;
        }
    }
}

18. 將編輯資料回寫 DataSet


DataSet ds = new DataSet("MyDataSet");
ds.Tables[tableName].Rows.Clear();

for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) // 排除新列
{
    DataRow row = ds.Tables[tableName].NewRow();
    for (int j = 0; j < dataGridView1.Columns.Count; j++)
        row[j] = dataGridView1.Rows[i].Cells[j].Value?.ToString();
    ds.Tables[tableName].Rows.Add(row);
}

進階擴充:自訂 Cell 與 Column

繼承 DataGridViewTextBoxCell 建立自訂 Cell,再繼承 DataGridViewColumn 指定 CellTemplate,即可將客製化欄位加入 DataGridView,實現下拉選單、進度條、按鈕等豐富介面元素。

總結

DataGridView 功能極其豐富,掌握上述 18 項技巧已能應付大多數商務應用場景。關鍵在於:善用 AutoSizeColumnsMode 與 VirtualMode 提升效能;透過 DefaultCellStyle 統一格式;利用事件驅動完成驗證與資料同步。實務上建議搭配 BindingSource 管理資料繫結,配合 DataTable 或實體類別集合,構建可維護的資料呈現層。

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