WinForm 中 DataGridView 控件的基础应用

624 阅读4分钟

前言

WinForm 桌面应用程序开发中,DataGridView 是一个非常常用且功能强大的控件,用于以表格形式展示和操作数据。

不管是显示数据库查询结果、用户输入表单,还是实现复杂的数据交互逻辑,DataGridView 都能胜任。

本文将从基础入手,结合完整代码示例,详细讲解如何在 Winform 应用程序中使用 DataGridView 控件,包括手动添加数据、绑定数据源、设置样式与事件处理等,帮助开发者快速掌握其使用方法。

正文

一、什么是 DataGridView?

DataGridView 是 .NET Framework 提供的一个用于显示表格数据的控件,它支持多种数据源(如 DataTable、List、DataSet 等),并允许用户进行排序、编辑、选择等操作。

它由以下基本元素组成:

  • 行(Rows)

  • 列(Columns)

  • 单元格(Cells)

通过这些元素,开发者可以灵活地构建各种数据展示界面。

二、DataGridView 的基本使用

1、创建 DataGridView 控件

可以在 Visual Studio 的设计器中直接拖放 DataGridView 控件到窗体上,也可以通过代码动态创建:

private DataGridView dataGridView1;

private void InitializeDataGridView()
{
    dataGridView1 = new DataGridView();
    this.Controls.Add(dataGridView1);
    dataGridView1.Dock = DockStyle.Fill; // 填充整个窗体
}

2、手动添加列和数据

可以通过 Columns.Add() 方法添加列,并通过 Rows.Add() 添加数据行:

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);
}

3、数据绑定方式

更常见的是使用数据绑定的方式加载数据,比如从数据库获取 DataTable 并绑定到 DataGridView:

private void BindDataGridView()
{
    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 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;
}

完整的使用示例如下:

using System.Data;

namespace AppDataGrid
{
    public partial class Form1 : Form
    {
        private DataGridView dataGridView1 = new DataGridView();

        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;
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;

            this.Controls.Add(dataGridView1);
        }

        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 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 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;
        }
    }
}

三、常用属性与事件

1、属性设置

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

2、事件处理

常用的事件包括单元格点击、行选择、数据更新等:

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}");
    }
}

四、高级功能

1、自定义列类型

可以添加复选框列来实现多选功能:

DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.HeaderText = "选择";
dataGridView1.Columns.Add(checkColumn);

2、格式化显示

对日期、数字等字段进行格式化输出:

dataGridView1.Columns["DateColumn"].DefaultCellStyle.Format = "yyyy-MM-dd";

五、性能优化建议

1、大数据量时使用虚拟模式(Virtual Mode)

避免一次性加载大量数据,提升响应速度。

2、避免在 CellPainting 等绘制事件中执行复杂逻辑

绘制事件频繁触发,应保持轻量级处理。

3、优先使用数据绑定而非逐行添加

数据绑定效率更高,维护也更方便。

总结

DataGridView 是 C# Winform 开发中最实用的数据展示控件之一。它不仅支持丰富的数据显示方式,还提供了强大的交互功能,如数据绑定、自定义列、事件处理等。

通过本文的介绍和完整代码示例,开发者可以快速掌握 DataGridView 的基本使用技巧,并进一步探索其高级功能,从而构建出专业、高效的数据管理界面。

无论你是初学者还是有一定经验的开发者,掌握 DataGridView 的使用都将极大提升你的 Winform 开发能力。希望本文对你有所帮助!

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

作者:技术老小子

出处:mp.weixin.qq.com/s/kuDFrELtzu5_v56d-llTKQ

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!