C# WinForm —— 39 40 41 42 DataGridView 介绍与使用

1. 简介

以网格的形式来显示表格数据,一般与数据库交互,将数据库中某一个表格的数据绑定到 UI控件上 并显示出来
网格中的行和列由用户自定义

三个重要对象:行、列、单元格
在这里插入图片描述

2. 属性

属性解释
(Name)控件ID,在代码里引用的时候会用到
AllowUserToAddRows指示是否向用户显示用于添加行的选项
AllowUserToAddRows为true时,编辑第一行的时候,下面自动出现空白行
编辑完按回车保存
在这里插入图片描述
AllowUserToDeleteRows指示是否允许用户从DataGridView删除行
AllowUserToDeleteRows为true时,选中要删除的行,按Delete即可删除行
不推荐,容易误删数据,推荐使用逻辑删除,添加标识列,0表示删除,1表示未删除
在这里插入图片描述
AllowUserToOrderColumns是否可以拖动来调整列的顺序
AlternatingRowsDefaultCellStyle在这里插入图片描述
Anchor定义某个控件绑定到容器的边缘,当控件绑定到某个边缘时,与指定边缘最接近的控件边缘与指定边缘之间的距离将保持不变
AutoSizeColumnsMode确定可见列的自主调整大小模式
None:不调整
ColumnHeader:
AllCellsExceptHeader:
AllCells:
DisplayedCellsExceptHeader:
DisplayedCells:
Fill:完全填充
在这里插入图片描述
AutoSizeRowsMode确定可见行的自主调整大小模式,不用特别去设置
None:不调整
AllHeaders:
AllCellsExceptHeader:
AllCells:
DisplayedCellsExceptHeader:
DisplayedCells:
DisplayedHeaders:
CellBoderStyle单元格的边框样式:Custom、Single(默认)、Raised、Sunken、None、SingleVertical、RaisedVertical、SunkenVertical、SingleHorizontal、RaisedHorizontal、SunkenHorizontal
RaisedHorizontal样式如下:
在这里插入图片描述
Columns表格列的集合
在这里插入图片描述
在这里插入图片描述
DataSource指示DataGridView控件的数据源,一般是DataTable或者 List<T> 集合
AutoGenerateColumns指定数据源时,是否自动创建列,默认是true
MultiSelect用户是否可以选择DataGridView的多个单元格、行或列
RowHeaderVisible不显示行标题时如下:
在这里插入图片描述
RowTemplate设置行的默认格式:
在这里插入图片描述
Scrollbars滚动条的类型:横向、竖向、双向都有、None
SelectionMode选择的模式
在这里插入图片描述

在这里插入图片描述

3. 事件

常用事件解释
CellClick单击单元格任意部分时触发的事件
CellContentClick单击单元格的内容时触发的事件
在这里插入图片描述
CellValueChanged单元格的值改变时触发的事件,失去焦点时才触发
在这里插入图片描述
CurrentCellDirtyStateChanged单元格状态因其内容更改而更改时发生

在这里插入图片描述

4. 代码添加列、行

代码添加列:
在这里插入图片描述
在这里插入图片描述

代码添加行:
在这里插入图片描述

在这里插入图片描述

5. 绑定数据源

DataSource:指示DataGridView控件的数据源,一般是DataTable或者 List<T> 集合

5.1 DataTable数据源

  1. 数据库中的UserInfos表格
    在这里插入图片描述

  2. 提前写好的 DBHelper类
    在这里插入图片描述

  3. 往From中拖一个DataGridView控件

  4. 编辑Form code
    using System.Data
    using WFFormUse.Helper
    在这里插入图片描述

在这里插入图片描述

  1. 运行结果:
    在这里插入图片描述
    上面的 UserId,UserName,Age是数据库中的表格的字段名,因为DataGridView中没有手动添加列,而AutoGenerateColumns属性默认是true,所以会根据数据库中的字段名自动添加列

上面的代码只适用于往From中拖DataGridView控件后,没有手动添加列的情况,当我们希望UI上面 DataGridView显示的列标题是编号、姓名、年龄时,可以:

  1. 可以对sql语句做文章——为列名取别名
    在这里插入图片描述
    在这里插入图片描述
  2. 查询结果集可能包含更多列的数据,但UI上只显示这三列数据时,需要事先把DataGridView的AutoGenerateColumns属性设为false,在DataGridView控件中添加列,并设置列的DataPropertyName属性,
    在这里插入图片描述
    在这里插入图片描述
    “Select * from UserInfos”是获取 UserInfos表格的所有列,一般情况下,根据需求,只需查询需要的列

5.2 List列表 数据源

将数据库中的数据表格转换成List列表的两种方式:

  1. 加载到DataTable中,将DataTable的每个行变成一个对象,多行就是一个List集合
  2. 数据量不是特别大的情况下,利用SqlDataReader逐条读取,转换为一个实体对象,实时添加到List集合中。这种方法会持续占用连接,数据量大的时候,会造成卡顿

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

对获取的数据源进行操作:

在这里插入图片描述

如果DataGridView绑定的DataSource是List类型,那么只能将 dgvUserNew.DataSource 转换成 List类型,获取的行对象是UserInfoNew类型
如果DataGridView绑定的DataSource是DataTable类型,那么只能将 dgvUserNew.DataSource 转换成 DataTable类型,获取的行对象是 DataRow类型

在这里插入图片描述

对获取的数据源进行删除,修改:
在这里插入图片描述
运行:
在这里插入图片描述
点击按钮之后,就变成了:
在这里插入图片描述
这里只对获取的数据源进行了修改,没有修改数据库中的数据

也可以对数据源进行修改,发送到数据库中,再从数据库中获取数据源

参考:

  1. 2023年C#之WinForm零基础教程50讲-39
  2. 2023年C#之WinForm零基础教程50讲-40
  3. 2023年C#之WinForm零基础教程50讲-41
  4. 2023年C#之WinForm零基础教程50讲-42

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484047.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端常用缓存技术深度剖析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

gradle下载慢解决方案2024 /12 /1android studio (Windows环境)

gradle下载慢解决方案2024 /12 /1 默认环境配置好了,环境配置和程序安装请出门右转 打开软件,点击右上角设置,找到如下设置页 选择本地安装并制定好你已经安装好的 gradle 应用保存即可 全局插件环境配置(新版本可以直接在设置中添加了) 找对应位置添加国内源并把前面的内置源…

后端返回前端的数据量过大解决方案

后端返回前端的数据量过大解决方案 性能面板(Performance) chrome调试指南 原因 遇到一个页面有好几个表格&#xff0c;部分表格采用虚拟滚动条 数据量有点大 接近快60s了&#xff0c;看一下是哪里导致的慢 后台请求方法执行并不慢 2024-12-04 15:21:52.889 INFO 69948 …

在服务器上实现本地python文件的依赖

1、在python中&#xff0c;一个python文件就可以视为一个模块进行导入 2、使用import 导入时&#xff0c;若使用pip 下载过可以直接导入 3、假如是自己写的同项目中的文件会去sys.path 中查找 比如说 我现在 test 下有一个 python文件 运行 下面的代码 打印的数据如上图所示p…

Python酷库之旅-第三方库Pandas(255)

目录 一、用法精讲 1206、pandas.tseries.offsets.SemiMonthEnd.is_on_offset方法 1206-1、语法 1206-2、参数 1206-3、功能 1206-4、返回值 1206-5、说明 1206-6、用法 1206-6-1、数据准备 1206-6-2、代码示例 1206-6-3、结果输出 1207、pandas.tseries.offsets.S…

大数据新视界 -- Hive 元数据管理:核心元数据的深度解析(上)(27 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

【网络安全】网站常见安全漏洞 - 网站基本组成及漏洞定义

文章目录 引言1. 一个网站的基本构成2. 一些我们经常听到的安全事件3. 网站攻击者及其意图3.1 网站攻击者的类型3.2 攻击者的意图 4. 漏洞的分类4.1 按来源分类4.2 按危害分类4.3 常见漏洞与OWASP Top 10 引言 在当今的数字化时代&#xff0c;安全问题已成为技术领域不可忽视的…

Web 毕设篇-适合小白、初级入门练手的 Spring Boot Web 毕业设计项目:智行无忧停车场管理系统(前后端源码 + 数据库 sql 脚本)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 项目介绍 1.1 项目功能 2.0 用户登录功能 3.0 首页界面 4.0 车辆信息管理功能 5.0 停车位管理功能 6.0 入场登记管理功能 7.0 预约管理功能 8.0 收费规则功能 9.0…

猎板 PCB特殊工艺:铸就电子行业核心竞争力新高度

在当今竞争激烈且技术驱动的电子制造领域&#xff0c;印制电路板&#xff08;PCB&#xff09;作为电子产品的关键基石&#xff0c;其特殊工艺的发展水平直接影响着整个行业的创新步伐与产品品质。猎板 PCB 凭借在厚铜板、孔口铺铜、HDI 板、大尺寸板以及高频高速板等特殊工艺方…

STM32 进阶 定时器3 通用定时器 案例2:测量PWM的频率/周期

需求分析 上一个案例我们输出了PWM波&#xff0c;这个案例我们使用输入捕获功能&#xff0c;来测试PWM波的频率/周期。 把测到的结果通过串口发送到电脑&#xff0c;检查测试的结果。 如何测量 1、输入捕获功能主要是&#xff1a;测量输入通道的上升沿和下降沿 2、让第一个…

Android平台GB28181设备接入模块如何支持GB28181云端录像补录

技术背景 GB28181 的补录功能是一种用于弥补视频数据缺失的重要机制。在实际的视频监控场景中&#xff0c;由于网络不稳定、设备故障等多种因素&#xff0c;可能会导致视频数据在上云或存储过程中出现缺失&#xff0c;无法保证数据的完整性。GB28181 的补录功能就是为了解决这…

如何将python项目导出为docker镜像

如何将python项目导出为docker镜像 前提条件步骤 1: 创建并准备 Python 项目步骤 2: 创建 `setup.py`步骤 3: 打包项目步骤 4: 创建 Dockerfile步骤 5: 构建 Docker 镜像步骤 6: 运行 Docker 容器步骤 7: 保存修改并继续开发总结要将修改后的Python代码导出为 .tar.gz 格式,并…

Lua使用点号和冒号的区别

首先建立一个table&#xff0c;再分别定义两个方法&#xff0c;如下&#xff1a; local meta {}function meta:test1(...)print(self)print("")for k,v in pairs({...}) doprint(v)end endfunction meta.test2(...)print(self)print("")for k,v in pairs…

OpenGL ES详解——文字渲染

目录 一、文字渲染 二、经典文字渲染&#xff1a;位图字体 1.概念 2.优缺点 三、现代文字渲染&#xff1a;FreeType 1.着色器 2.渲染一行文字 四、关于未来 一、文字渲染 当你在图形计算领域冒险到了一定阶段以后你可能会想使用OpenGL来绘制文字。然而&#xff0c;可能…

【数据中心建设资料】数据中心安全建设解决方案,数据中心整理解决方案,数据中心如何做到安全保障,数据中台全方案(Word全原件)

第一章 解决方案 1.1 建设需求 1.2 建设思路 1.3 总体方案 信息安全系统整体部署架构图 1.3.1 IP准入控制系统 1.3.2 防泄密技术的选择 1.3.3 主机账号生命周期管理系统 1.3.4 数据库账号生命周期管理系统 1.3.5 双因素认证系统 1.3.6 数据库审计系统 1.3.7 数据脱敏系统 1.3.8…

菲涅尔透镜加工:倚光科技的光学创新之路

在光学元件的广袤星空中&#xff0c;菲涅尔透镜以其独特的设计和卓越的性能闪耀着独特光芒。菲涅尔透镜通过将透镜表面由一系列同心棱纹组成&#xff0c;大幅减少了材料的使用量&#xff0c;却依然能够有效地汇聚或发散光线&#xff0c;在众多领域展现出无可比拟的优势&#xf…

OSCP:我理解的Web环境知识

你需要特别关注以下模块所涵盖的知识点&#xff0c;因为它们在考试中出现的概率很高。 1、SQL 注入&#xff08;SQL Injection&#xff09; ●允许攻击者注入自定义的、潜在恶意的 SQL 代码&#xff0c;由底层数据库执行。 ●可能导致数据泄露或目标服务器上的远程代码执行&…

flink-connector-mysql-cdc:01 mysql-cdc础配置代码演示

flink-connector-mysql-cdc&#xff1a; 01 mysql-cdc基础配置代码演示02 mysql-cdc高级扩展03 mysql-cdc常见问题汇总04 mysql-cdc-kafka生产级代码分享05 flink-kafka-doris生产级代码分享06 flink-kafka-hudi生产级代码分享 flink-cdc版本&#xff1a;3.2.0 flink版本&…

c++数据结构算法复习基础--11--高级排序算法-快速排序-归并排序-堆排序

高阶排序 1、快速排序 冒泡排序的升级算法 每次选择一个基准数&#xff0c;把小于基准数的放到基准数的左边&#xff0c;把大于基准数的放到基准数的右边&#xff0c;采用 “ 分治算法 ”处理剩余元素&#xff0c;直到整个序列变为有序序列。 最好和平均的复杂度&#xff1a…

分类算法中的样本不平衡问题及其解决方案

一、样本不平衡问题概述 在机器学习的分类任务中&#xff0c;样本不平衡是指不同类别训练样本数量存在显著差异的现象。这一差异会给模型训练和性能评估带来挑战&#xff0c;尤其在处理少数类样本时&#xff0c;模型可能难以有效学习其特征。 以二分类为例&#xff0c;理想情况…