首页 > 精选要闻 > 宝藏问答 >

问 DataGridView 控件详细介绍 WinForm 数据表格控件

2026-11-05 10:08:19
最佳答案

答

DataGridView 是 WinForm 里面最常用的数据表格控件,属于.NET Framework 自带控件,核心作用就是以二维表格形式展示、编辑、排序、筛选结构化数据,支持绑定数据库、DataTable、List 泛型等多种数据源,相比老版本的 DataGrid 控件,DataGridView 功能更完善,扩展性更强,是做管理系统、报表界面、增删改查页面首选控件,它可以自定义列类型,内置文本框列、按钮列、复选框列、下拉框列等多种列样式,同时提供丰富事件,能够拦截单元格编辑、选中、点击、排序等操作,开发人员不用从零写表格渲染代码,只需要配置属性和绑定数据源,就能快速实现数据展示和交互,适合 C WinForm 桌面开发场景。

基础信息对照表

项目说明
所属框架.NET WinForm
命名空间System.Windows.Forms
核心功能数据展示 编辑 排序 分页 自定义列
支持数据源DataTable BindingSource List 数据库查询结果
替代控件旧版 DataGrid 已经被它取代

核心功能讲解

第一点 数据绑定,这是最常用用法,一般搭配 BindingSource 作为中间层,把 DataTable 或者泛型集合绑定到 DataSource 属性,绑定之后控件自动生成列,也可以关闭自动生成列,手动添加自定义列,手动绑定可以精确控制列标题、宽度、是否只读。

第二点 内置列类型,DataGridViewTextBoxColumn 文本框列,用来显示普通文字数字,DataGridViewCheckBoxColumn 复选框列,适合布尔类型勾选,DataGridViewButtonColumn 按钮列,可以做编辑删除按钮,DataGridViewComboBoxColumn 下拉框列,单元格里面下拉选择,DataGridViewImageColumn 图片列,展示图片数据。

第三点 编辑能力,默认单元格双击就可以进入编辑状态,可以通过 ReadOnly 属性设置整表只读,也可以单独设置某一列或者单个单元格只读,编辑完成触发 CellEndEdit 事件,可以在这里写校验代码,比如判断数字是否合法,不合法就提示并取消修改。

第四点 排序与选中,点击列头默认支持升序降序排序,可以关闭 SortMode 取消排序,支持单选多行多选,SelectionMode 属性可以设置选中整行、单元格、整列,开发系统一般设置 FullRowSelect 整行选中,方便获取当前选中行数据。

常用关键属性清单

DataSource 绑定数据源

AutoGenerateColumns 是否自动生成列,true 自动生成,false 手动建列

ReadOnly 是否整表只读

SelectionMode 选中模式

ColumnHeadersHeightSizeMode 列头高度模式

AllowUserToAddRows 是否允许用户新增空行

AllowUserToDeleteRows 是否允许用户删除行

RowHeadersVisible 是否显示行头

DefaultCellStyle 设置单元格默认字体颜色背景对齐方式

常用核心事件清单

CellClick 单元格点击事件

CellDoubleClick 单元格双击事件

CellEndEdit 单元格编辑结束事件

SelectionChanged 选中行变化事件

RowPrePaint 行绘制前事件,自定义行样式

DataError 数据绑定出错事件,处理类型转换报错,避免程序崩溃

基础开发步骤

1 新建 WinForm 项目,从工具箱拖拽 DataGridView 控件到窗体

2 准备数据源,比如创建 DataTable 或者 List 泛型对象

3 设置 DataSource 完成绑定,按需修改 AutoGenerateColumns

4 配置列,设置列标题宽度,设置只读、对齐等样式

5 编写事件代码,实现增删改查、数据校验

6 运行测试,验证排序编辑选中功能

常见优化要点

大数据量的时候,默认 DataGridView 加载会比较卡,可以开启双缓冲,减少界面重绘卡顿,不要一次性加载超大数据集,配合分页加载提升性能,绑定数据库的时候,建议使用 BindingSource,方便同步更新,修改数据之后调用 EndEdit 提交变更,处理 DataError 事件,避免类型转换异常直接崩溃。

相关 FAQ

问题 1 DataGridView 和 DataGrid 有什么区别

回答 1 DataGridView 是新版控件,属于 WinForm,功能更强,支持多种列类型、丰富事件、自定义样式,旧 DataGrid 功能有限,已经不再推荐新项目使用。

问题 2 DataGridView 怎么获取当前选中行的数据

回答 1 可以通过 SelectedRows 获取选中行,读取 Cells 里面单元格的值,整行选中模式下推荐用 SelectedRows [0] 读取当前行数据。

问题 3 DataGridView 绑定 List 泛型可以吗

回答 1 可以,DataGridView 支持绑定 List,但是自动生成列依赖类的公共属性,复杂对象嵌套属性需要手动配置列。

问题 4 DataGridView 点击列头排序失效是什么原因

回答 1 一般是 SortMode 属性设置为 NotSortable,或者数据源本身不支持排序,比如普通 List 泛型绑定后排序能力有限,推荐使用 DataTable 或者 BindingList 支持排序。

免责声明

本文 DataGridView 控件详细介绍基于.NET WinForm 常规开发知识,不同.NET 版本控件细节会有差异,实际开发请结合对应版本官方文档。