LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Winform开发:DataGridView完全入门实战指南

admin
2025年5月30日 21:40 本文热度 28

本文将详细讲解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;
        }
    }
}

性能优化建议

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

结语

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


阅读原文:原文链接


该文章在 2025/6/2 13:13:48 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved