编辑
2025-10-31
C#
00

目录

什么是DataGridView?
DataGridView基本使用
创建DataGridView控件
手动添加列和数据
数据绑定
完整例子
常用属性与事件
属性设置
事件处理
高级功能
自定义列类型
格式化显示
完整例子
性能优化建议
结语

本文将详细讲解C# Winform中DataGridView控件的基础应用,通过实际代码示例帮助开发者快速掌握DataGridView的使用技巧。

什么是DataGridView?

DataGridView是Windows窗体应用程序中最常用的数据展示控件,它可以以表格形式灵活地显示和编辑数据。主要由行(Rows)、列(Columns)和单元格(Cells)组成。

DataGridView基本使用

创建DataGridView控件

C#
// 在Form设计器中添加DataGridView控件 private DataGridView dataGridView1; // 代码初始化方式 private void InitializeDataGridView() { dataGridView1 = new DataGridView(); this.Controls.Add(dataGridView1); dataGridView1.Dock = DockStyle.Fill; // 填充整个窗体 }

手动添加列和数据

C#
private void PopulateDataGridView() { // 添加列 dataGridView1.Columns.Add("ID", "编号"); dataGridView1.Columns.Add("Name", "姓名"); dataGridView1.Columns.Add("Age", "年龄"); // 添加数据行 dataGridView1.Rows.Add(1, "张三", 25); dataGridView1.Rows.Add(2, "李四", 30); }

数据绑定

C#
// 使用数据集绑定 private void BindDataGridView() { // 假设有一个DataTable类型的数据源 DataTable dt = GetDataFromDatabase(); dataGridView1.DataSource = dt; }

完整例子

C#
using System.Data; namespace AppDataGrid { public partial class Form1 : Form { public Form1() { InitializeComponent(); InitializeDataGridView(); //PopulateDataGridView();// 手动添加列和数据 BindDataGridView();// 使用数据集绑定,这个常用一些 } // 代码初始化方式 private void InitializeDataGridView() { dataGridView1.Dock = DockStyle.Fill; // 填充整个窗体 // 设置一些常用属性 dataGridView1.AllowUserToAddRows = false; // 不允许用户添加行 dataGridView1.AllowUserToDeleteRows = false; // 不允许用户删除行 dataGridView1.ReadOnly = true; // 禁用编辑功能 dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 自动调整列宽度以填充整个DataGridView dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 选择整行 } // 手动添加列和数据 private void PopulateDataGridView() { // 添加列 dataGridView1.Columns.Add("ID", "编号"); dataGridView1.Columns.Add("Name", "姓名"); dataGridView1.Columns.Add("Age", "年龄"); // 添加数据行 dataGridView1.Rows.Add(1, "张三", 25); dataGridView1.Rows.Add(2, "李四", 30); dataGridView1.Rows.Add(3, "王五", 28); dataGridView1.Rows.Add(4, "赵六", 35); } // 使用数据集绑定 private void BindDataGridView() { // 假设有一个DataTable类型的数据源 DataTable dt = GetDataFromDatabase(); dataGridView1.DataSource = dt; // 可以在绑定后设置列标题 if (dataGridView1.Columns.Count >= 3) { dataGridView1.Columns[0].HeaderText = "编号"; dataGridView1.Columns[1].HeaderText = "姓名"; dataGridView1.Columns[2].HeaderText = "年龄"; } } // 模拟从数据库获取数据 private DataTable GetDataFromDatabase() { // 创建一个新的DataTable DataTable dt = new DataTable(); // 添加列 dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); // 添加数据行 dt.Rows.Add(1, "张三", 25); dt.Rows.Add(2, "李四", 30); dt.Rows.Add(3, "王五", 28); dt.Rows.Add(4, "赵六", 35); dt.Rows.Add(5, "小明", 22); return dt; } } }

image.png

常用属性与事件

属性设置

C#
// 设置DataGridView外观 dataGridView1.AllowUserToAddRows = false; // 禁止用户添加行 dataGridView1.ReadOnly = true; // 设置为只读 dataGridView1.MultiSelect = false; // 禁止多选

事件处理

C#
private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e) { // 单击单元格事件 if(e.RowIndex >= 0) { string cellValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); MessageBox.Show($"您点击了:{cellValue}"); } }

高级功能

自定义列类型

C#
// 创建复选框列 DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn(); checkColumn.HeaderText = "选择"; dataGridView1.Columns.Add(checkColumn);

格式化显示

C#
// 设置日期列格式 dataGridView1.Columns["DateColumn"].DefaultCellStyle.Format = "yyyy-MM-dd";

完整例子

C#
using System.Data; namespace AppDataGrid { public partial class Form1 : Form { public Form1() { InitializeComponent(); InitializeDataGridView(); PopulateDataGridView();// 手动添加列和数据 //BindDataGridView();// 使用数据集绑定,这个常用一些 AddAdvancedFeatures(); // 注册事件处理器 dataGridView1.CellClick += DataGridView_CellClick; } // 代码初始化方式 private void InitializeDataGridView() { dataGridView1.Dock = DockStyle.Fill; // 填充整个窗体 // 设置一些常用属性 dataGridView1.AllowUserToAddRows = false; // 不允许用户添加行 dataGridView1.AllowUserToDeleteRows = false; // 不允许用户删除行 dataGridView1.ReadOnly = true; // 禁用编辑功能 dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; // 自动调整列宽度以填充整个DataGridView dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 选择整行 } // 手动添加列和数据 private void PopulateDataGridView() { // 添加列 dataGridView1.Columns.Add("ID", "编号"); dataGridView1.Columns.Add("Name", "姓名"); dataGridView1.Columns.Add("Age", "年龄"); // 添加日期列 dataGridView1.Columns.Add("DateColumn", "日期"); // 添加复选框列 DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn(); checkColumn.HeaderText = "选择"; checkColumn.Name = "SelectColumn"; dataGridView1.Columns.Add(checkColumn); // 添加数据行 dataGridView1.Rows.Add(1, "张三", 25, DateTime.Now.AddDays(-10), true); dataGridView1.Rows.Add(2, "李四", 30, DateTime.Now.AddDays(-5), false); dataGridView1.Rows.Add(3, "王五", 28, DateTime.Now, true); dataGridView1.Rows.Add(4, "赵六", 35, DateTime.Now.AddDays(5), false); // 设置日期列格式 dataGridView1.Columns["DateColumn"].DefaultCellStyle.Format = "yyyy-MM-dd"; } // 使用数据集绑定 private void BindDataGridView() { // 假设有一个DataTable类型的数据源 DataTable dt = GetDataFromDatabase(); dataGridView1.DataSource = dt; // 可以在绑定后设置列标题 if (dataGridView1.Columns.Count >= 4) { dataGridView1.Columns[0].HeaderText = "编号"; dataGridView1.Columns[1].HeaderText = "姓名"; dataGridView1.Columns[2].HeaderText = "年龄"; dataGridView1.Columns[3].HeaderText = "日期"; // 设置日期列格式 dataGridView1.Columns[3].DefaultCellStyle.Format = "yyyy-MM-dd"; } // 添加复选框列 AddCheckBoxColumn(); } // 添加复选框列 private void AddCheckBoxColumn() { DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn(); checkColumn.HeaderText = "选择"; checkColumn.Name = "SelectColumn"; dataGridView1.Columns.Add(checkColumn); // 为所有行的复选框列设置默认值 foreach (DataGridViewRow row in dataGridView1.Rows) { row.Cells["SelectColumn"].Value = false; } } // 添加高级功能 private void AddAdvancedFeatures() { // 设置交替行颜色 dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = System.Drawing.Color.LightGray; // 设置行头的样式 dataGridView1.RowHeadersWidth = 50; // 设置单元格数据类型验证 dataGridView1.Columns["Age"].ValueType = typeof(int); // 冻结第一列 if (dataGridView1.Columns.Count > 0) { dataGridView1.Columns[0].Frozen = true; } } // 单元格点击事件处理 private void DataGridView_CellClick(object sender, DataGridViewCellEventArgs e) { // 单击单元格事件 if (e.RowIndex >= 0 && e.ColumnIndex >= 0) { // 检查单元格值是否为空 if (dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null) { string cellValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); MessageBox.Show($"您点击了:{cellValue}"); } else { MessageBox.Show($"您点击了空单元格,位置: [{e.RowIndex}, {e.ColumnIndex}]"); } } } // 模拟从数据库获取数据 private DataTable GetDataFromDatabase() { // 创建一个新的DataTable DataTable dt = new DataTable(); // 添加列 dt.Columns.Add("ID", typeof(int)); dt.Columns.Add("Name", typeof(string)); dt.Columns.Add("Age", typeof(int)); dt.Columns.Add("DateColumn", typeof(DateTime)); // 添加数据行 dt.Rows.Add(1, "张三", 25, DateTime.Now.AddDays(-10)); dt.Rows.Add(2, "李四", 30, DateTime.Now.AddDays(-5)); dt.Rows.Add(3, "王五", 28, DateTime.Now); dt.Rows.Add(4, "赵六", 35, DateTime.Now.AddDays(5)); dt.Rows.Add(5, "小明", 22, DateTime.Now.AddDays(10)); return dt; } } }

image.png

性能优化建议

  1. 对于大数据量,建议使用虚拟模式
  2. 避免在单元格绘制事件中执行复杂操作
  3. 使用数据绑定而非逐行添加

结语

DataGridView是Winform中强大的数据展示控件,通过合理使用,可以快速构建专业的数据管理界面。

🔔 开发小贴士:多实践,多尝试不同的属性和事件,熟能生巧!

希望本文对您的Winform开发有所帮助。如需更多技术分享,欢迎关注我们!

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!