C# DataGridView(干貨版)


一、添加行列並獲取信息

界面如下:

在這里插入圖片描述

代碼如下:

 1 using System;  2 using System.Collections.Generic;  3 using System.ComponentModel;  4 using System.Data;  5 using System.Drawing;  6 using System.Linq;  7 using System.Text;  8 using System.Threading.Tasks;  9 using System.Windows.Forms; 10 
11 namespace DataGridView 12 { 13     public partial class Form1 : Form 14  { 15         int count = 0; 16         public Form1() 17  { 18  InitializeComponent(); 19  } 20 
21         private void Form1_Load(object sender, EventArgs e) 22  { 23             //根據Header和所有單元格的內容自動調整行的高度
24             dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 25             //添加三列
26             for (int i = 0; i < 3; i++) 27  { 28                 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()); 29                 dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;  //設置所有列自適應寬度
30  } 31             //三列的標題
32             dataGridView1.Columns[0].HeaderText = "序號"; 33             dataGridView1.Columns[1].HeaderText = "日期"; 34             dataGridView1.Columns[2].HeaderText = "說明"; 35             //設置對齊方式和字體
36             dataGridView1.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 37             dataGridView1.Font = new Font("宋體", 11); 38  } 39         //添加行
40         private void button1_Click(object sender, EventArgs e) 41  { 42             int index = this.dataGridView1.Rows.Add(); 43             this.dataGridView1.Rows[index].Cells[0].Value = count++; 44             this.dataGridView1.Rows[index].Cells[1].Value = "2"; 45             this.dataGridView1.Rows[index].Cells[2].Value = "監聽"; 46  } 47         //獲取信息
48         private void button2_Click(object sender, EventArgs e) 49  { 50             //獲取當前活動單元格內容
51             Console.WriteLine("當前活動單元格內容:" + dataGridView1.CurrentCell.Value); 52              //取得當前單元格的列Index
53             Console.WriteLine("當前單元格的列Index:" + dataGridView1.CurrentCell.ColumnIndex); 54             //取得當前單元格的行Index
55             Console.WriteLine("取得當前單元格的行Index:" + dataGridView1.CurrentCell.RowIndex); 56             // 設定 (1, 1) 為當前單元格 
57             dataGridView1.CurrentCell = dataGridView1[1, 1]; 58  } 59  } 60 }

測試:

點擊添加:

在這里插入圖片描述

選中(2,1)處的單元格,點擊獲取,命令行輸出:

1 當前活動單元格內容:2
2 當前單元格的列Index:1
3 取得當前單元格的行Index:2

活動單元格變為(1,1)處的單元格:

在這里插入圖片描述


二、設置單元格只讀屬性

代碼如下:

 1 using System;  2 using System.Collections.Generic;  3 using System.ComponentModel;  4 using System.Data;  5 using System.Drawing;  6 using System.Linq;  7 using System.Text;  8 using System.Threading.Tasks;  9 using System.Windows.Forms; 10 
11 namespace DataGridView 12 { 13     public partial class Form1 : Form 14  { 15         int count = 0; 16         public Form1() 17  { 18  InitializeComponent(); 19  } 20 
21         private void Form1_Load(object sender, EventArgs e) 22  { 23             //根據Header和所有單元格的內容自動調整行的高度
24             dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 25             //添加三列
26             for (int i = 0; i < 3; i++) 27  { 28                 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()); 29                 dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;  //設置所有列自適應寬度
30  } 31             //三列的標題
32             dataGridView1.Columns[0].HeaderText = "序號"; 33             dataGridView1.Columns[1].HeaderText = "日期"; 34             dataGridView1.Columns[2].HeaderText = "說明"; 35             //設置對齊方式和字體
36             dataGridView1.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 37             dataGridView1.Font = new Font("宋體", 11); 38            
39            /******************************新增加的代碼************************************/
40             dataGridView1.ReadOnly = true;    //設置所有單元格都不可編輯 41             // 設置 DataGridView1 的第2列整列單元格為只讀
42             dataGridView1.Columns[1].ReadOnly = true; 43              // 設置 DataGridView1 的第3行整行單元格為只讀
44             dataGridView1.Rows[2].ReadOnly = true; 45              // 設置 DataGridView1 的[0,0]單元格為只讀
46             dataGridView1[0, 0].ReadOnly = true; 47              /**********************************************************************************/
48  } 49         //添加行
50         private void button1_Click(object sender, EventArgs e) 51  { 52             int index = this.dataGridView1.Rows.Add(); 53             this.dataGridView1.Rows[index].Cells[0].Value = count++; 54             this.dataGridView1.Rows[index].Cells[1].Value = "2"; 55             this.dataGridView1.Rows[index].Cells[2].Value = "監聽"; 56  } 57        //獲取
58         private void button2_Click(object sender, EventArgs e) 59  { 60             //獲取當前活動單元格內容
61             Console.WriteLine("當前活動單元格內容:" + dataGridView1.CurrentCell.Value); 62              //取得當前單元格的列Index
63             Console.WriteLine("當前單元格的列Index:" + dataGridView1.CurrentCell.ColumnIndex); 64             //取得當前單元格的行Index
65             Console.WriteLine("取得當前單元格的行Index:" + dataGridView1.CurrentCell.RowIndex); 66             // 設定 (1, 1) 為當前單元格 
67             dataGridView1.CurrentCell = dataGridView1[1, 1]; 68  } 69  } 70 }

測試:

雙擊單元格,單元格不可編輯:

在這里插入圖片描述


三、最新一行不顯示

通常 DataGridView 的最下面一行是用戶新追加的行(行頭顯示 * )

在這里插入圖片描述

即不想顯示該新行,可以將 DataGridView 對象的 AllowUserToAddRows 屬性設置為 False。

代碼如下:

 1 using System;  2 using System.Collections.Generic;  3 using System.ComponentModel;  4 using System.Data;  5 using System.Drawing;  6 using System.Linq;  7 using System.Text;  8 using System.Threading.Tasks;  9 using System.Windows.Forms; 10 
11 namespace DataGridView 12 { 13     public partial class Form1 : Form 14  { 15         int count = 0; 16         public Form1() 17  { 18  InitializeComponent(); 19  } 20 
21         private void Form1_Load(object sender, EventArgs e) 22  { 23            //根據Header和所有單元格的內容自動調整行的高度
24             dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 25             //添加三列
26             for (int i = 0; i < 3; i++) 27  { 28                 dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()); 29                 //設置所有列自適應寬度
30                 dataGridView1.Columns[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; 31  } 32             //三列的標題
33             dataGridView1.Columns[0].HeaderText = "序號"; 34             dataGridView1.Columns[1].HeaderText = "日期"; 35             dataGridView1.Columns[2].HeaderText = "說明"; 36             //設置對齊方式和字體
37             dataGridView1.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 38             dataGridView1.Font = new Font("宋體", 11); 39  
40             //設置所有單元格都不可編輯
41             dataGridView1.ReadOnly = true; 42             // 設置 DataGridView1 的第2列整列單元格為只讀
43             dataGridView1.Columns[1].ReadOnly = true; 44             // 設置 DataGridView1 的第3行整行單元格為只讀 
45             dataGridView1.Rows[2].ReadOnly = true; 46             // 設置 DataGridView1 的[0,0]單元格為只讀 
47             dataGridView1[0, 0].ReadOnly = true; 48  } 49         //添加行
50         private void button1_Click(object sender, EventArgs e) 51  { 52             int index = this.dataGridView1.Rows.Add(); 53             this.dataGridView1.Rows[index].Cells[0].Value = count++; 54             this.dataGridView1.Rows[index].Cells[1].Value = "2"; 55             this.dataGridView1.Rows[index].Cells[2].Value = "監聽"; 56             /*****************新增加的代碼********************/
57             dataGridView1.AllowUserToAddRows = false; 58             /*************************************************/
59  } 60         //獲取
61         private void button2_Click(object sender, EventArgs e) 62  { 63             //獲取當前活動單元格內容
64             Console.WriteLine("當前活動單元格內容:" + dataGridView1.CurrentCell.Value); 65             //取得當前單元格的列Index
66             Console.WriteLine("當前單元格的列Index:" + dataGridView1.CurrentCell.ColumnIndex); 67              //取得當前單元格的行Index
68             Console.WriteLine("取得當前單元格的行Index:" + dataGridView1.CurrentCell.RowIndex); 69             // 設定 (1, 1) 為當前單元格 
70             dataGridView1.CurrentCell = dataGridView1[1, 1]; 71  } 72  } 73 }

測試:
在這里插入圖片描述


四、行列的隱藏和刪除

(1) 行、列的隱藏

1 DataGridView1.Columns[0].Visible = false;    // DataGridView1的第一列隱藏 
2 DataGridView1.Rows[0].Visible = false;       // DataGridView1的第一行隱藏 

2) 行頭、列頭的隱藏

1 DataGridView1.ColumnHeadersVisible = false; // 列頭隱藏 
2 DataGridView1.RowHeadersVisible = false; // 行頭隱藏 

(3) 行和列的刪除

1 //刪除名為"Column1"的列 
2 DataGridView1.Columns.Remove("Column1"); 3 //刪除第一列
4 DataGridView1.Columns.RemoveAt(0); 5 //刪除第一行 
6 DataGridView1.Rows.RemoveAt(0);

(4) 刪除選中行

1 foreach (DataGridViewRow r in DataGridView1.SelectedRows) 2 { 3     if (!r.IsNewRow) 4  { 5  DataGridView1.Rows.Remove(r); 6  } 7 }    

五、禁止列或者行的Resize

(1) 禁止所有的列或者行的Resize

1 // 禁止用戶改變DataGridView1的所有列的列寬 
2 DataGridView1.AllowUserToResizeColumns = false; 3 //禁止用戶改變DataGridView1の所有行的行高 
4 DataGridView1.AllowUserToResizeRows = false;

但是可以通過 DataGridViewColumn.Width 或者 DataGridViewRow.Height 屬性設定列寬和行高。

(2) 禁止指定行或者列的Resize

1 // 禁止用戶改變DataGridView1的第一列的列寬 
2 DataGridView1.Columns[0].Resizable = DataGridViewTriState.False; 3 // 禁止用戶改變DataGridView1的第一列的行寬 
4 DataGridView1.Rows[0].Resizable = DataGridViewTriState.False;

(3) 列寬和行高的最小值的設定

1 // 第一列的最小列寬設定為 100
2 DataGridView1.Columns[0].MinimumWidth = 100; 3 // 第一行的最小行高設定為 50
4 DataGridView1.Rows[0].MinimumHeight = 50;

(4) 禁止用戶改變行頭的寬度以及列頭的高度

1 // 禁止用戶改變列頭的高度 
2 DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; 3 // 設置用戶改變行頭的寬度 
4 DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.EnableResizing;

六、列寬和行高自動調整的設定
(1) 設定所有單元格行高和列寬自動調整

1 // 設定包括Header和所有單元格的列寬自動調整 
2 DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 3 // 設定包括Header和所有單元格的行高自動調整 
4 DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;

(2) 設定指定單元格行高和列寬自動調整

1 // 第一列自動調整 
2 DataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 3 // 設定列頭的寬度可以自由調整 
4 DataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; 5 // 設定行頭的寬度可以自由調整 
6 DataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;

七、行頭列頭的單元格

1 // 改變DataGridView1的第一列列頭內容
2 DataGridView1.Columns[0].HeaderCell.Value = "第一列"; 3 // 改變DataGridView1的第一行行頭內容
4 DataGridView1.Rows[0].HeaderCell.Value = "第一行"; 5 // 改變DataGridView1的左上頭部單元內容
6 DataGridView1.TopLeftHeaderCell.Value = "左上";

八、單元格的邊框、網格線樣式的設定

(1)DataGridView 的邊框線樣式的設定

DataGridView 的邊框線的樣式是通過 DataGridView.BorderStyle 屬性來設定的。

BorderStyle 屬性設定值是一個BorderStyle 枚舉: FixedSingle(單線,默認)、Fixed3D、None。

(2)單元格的邊框線樣式的設定

單元格的邊框線的樣式是通過 DataGridView.CellBorderStyle 屬性來設定的。

CellBorderStyle 屬性設定值是DataGridViewCellBorderStyle 枚舉。

(4) 單元格的邊框顏色的設定 單元格的邊框線的顏色可以通過 DataGridView.GridColor 屬性來設定的。

默認是 ControlDarkDark 。但是只有在 CellBorderStyle 被設定為 Single、SingleHorizontal、SingleVertical 的條件下才能改變其邊框線的顏色。

同樣,ColumnHeadersBorderStyle 以及 RowHeadersBorderStyle 只有在被設定為 Single 時,才能改變顏色

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM