本文将详细讲解C# Winform中DataGridView控件的基础应用,通过实际代码示例帮助开发者快速掌握DataGridView的使用技巧。
什么是DataGridView?
DataGridView是Windows窗体应用程序中最常用的数据展示控件,它可以以表格形式灵活地显示和编辑数据。主要由行(Rows)、列(Columns)和单元格(Cells)组成。
DataGridView基本使用
创建DataGridView控件
// 在Form设计器中添加DataGridView控件
private DataGridView dataGridView1;
// 代码初始化方式
private void InitializeDataGridView()
{
dataGridView1 = new DataGridView();
this.Controls.Add(dataGridView1);
dataGridView1.Dock = DockStyle.Fill; // 填充整个窗体
}
手动添加列和数据
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);
}
数据绑定
// 使用数据集绑定
private void BindDataGridView()
{
// 假设有一个DataTable类型的数据源
DataTable dt = GetDataFromDatabase();
dataGridView1.DataSource = dt;
}
完整例子
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;
}
}
}

常用属性与事件
属性设置
// 设置DataGridView外观
dataGridView1.AllowUserToAddRows = false; // 禁止用户添加行
dataGridView1.ReadOnly = true; // 设置为只读
dataGridView1.MultiSelect = false; // 禁止多选
事件处理
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}");
}
}
高级功能
自定义列类型
// 创建复选框列
DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.HeaderText = "选择";
dataGridView1.Columns.Add(checkColumn);
格式化显示
// 设置日期列格式
dataGridView1.Columns["DateColumn"].DefaultCellStyle.Format = "yyyy-MM-dd";
完整例子
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;
}
}
}

性能优化建议
- 对于大数据量,建议使用虚拟模式
- 避免在单元格绘制事件中执行复杂操作
- 使用数据绑定而非逐行添加
结语
DataGridView是Winform中强大的数据展示控件,通过合理使用,可以快速构建专业的数据管理界面。
阅读原文:原文链接
该文章在 2025/6/2 13:13:48 编辑过