【WinForm详细教程七】WinForm中的DataGridView控件
文章目录
- 1.主要属性
- DataSource
- 行(Row 相关属性)
- 列(Column 相关属性)
- 单元格(Cell 相关属性)
- 逻辑删除
- AllowUserToAddRows
- AllowUserToDeleteRows
- AllowUserToOrderColumns
- 其他布局和行为属性
- 2.控件中的行、列和单元格类
- DataGridViewColumn 类的属性
- DataGridViewRow 类的属性
- DataGridViewCell 类的属性
- 3.一个简单的示例,连接SQL数据库示例
- 4.DataGridView 数据源
- 绑定方式
- 优化建议
DataGridView 是一种在Windows窗体应用程序中使用的控件,它以网格(表格)的形式显示数据。这种控件允许用户定义行和列,以及对应的单元格。核心概念:
- 行(Rows):数据呈现的横向序列。
- 列(Columns):数据呈现的纵向序列。
- 单元格(Cells):行和列交叉点的数据存储单位。
1.主要属性
DataSource
DataSource 属性用于设置 DataGridView 控件的数据源。常用的数据源类型有:
DataTable:从数据库查询得到的数据表。List<T>:泛型集合,其中T是数据模型的类型。
行(Row 相关属性)
- DataGridViewRow: 表示
DataGridView控件中的一行。 - DataGridViewRowCollection: 表示
DataGridView控件中所有行的集合。 - Rows: 通过此属性可以访问或操作行集合中的行。
列(Column 相关属性)
- DataGridViewColumn: 表示
DataGridView控件中的一列。 - DataGridViewColumnCollection: 表示控件中所有列的集合。
- Columns: 通过此属性可以访问或操作列集合中的列。
单元格(Cell 相关属性)
- DataGridViewCell: 表示
DataGridView控件中的一个单元格。 - Value: 单元格存储的实际数据。
- Selected: 表示单元格是否被选中。
- RowIndex: 单元格所在的行索引。
- ColumnIndex: 单元格所在的列索引。
- FormattedValue: 用于显示的单元格经过格式化后的值。
逻辑删除
在某些业务场景下,行记录不是真正从数据源中删除,而是通过修改标识列的值来表示记录的状态(例如,0 表示正常,1 表示已删除)。
AllowUserToAddRows
控制是否显示用于添加新行的空白行。
True: 显示空白行,并且在用户输入数据时自动添加新的空白行。输入完成后按回车,数据就添加到控件中。False: 不显示用于添加新行的空白行。
AllowUserToDeleteRows
控制用户是否可以从 DataGridView 中删除行,默认值为 true。用户可以通过选中行并按 Delete 键来删除行。
AllowUserToOrderColumns
控制是否允许用户手动调整列的位置。
True: 允许用户通过拖动来重新放置列。False: 不允许用户手动调整列的位置。
其他布局和行为属性
- AllowUserToResizeColumns: 是否允许用户调整列宽。
- AllowUserToResizeRows: 是否允许用户调整行高。
- AutoSizeColumnsMode: 确定列的自动大小调整模式。
- AutoSizeRowsMode: 确定行的自动大小调整模式。
- EditMode: 定义何时可以编辑单元格的内容。
- GridColor: 网格线的颜色。
- MultiSelect: 是否允许用户同时选择多个单元格、行或列。
- SelectionMode: 设置单元格选择模式。
2.控件中的行、列和单元格类
DataGridViewColumn 类的属性
- Name: 列的名称。
- ColumnType: 列的类型,例如
DataGridViewTextBoxColumn,DataGridViewCheckBoxColumn等。 - DataPropertyName: 绑定到数据源的属性名。
- HeaderText: 列标题显示的文本。
DataGridViewRow 类的属性
- DataBoundItem: 绑定行的数据对象。
- Selected: 行是否被选中。
- State: 行的状态,如
DataGridViewElementStates。 - Cells: 行的单元格集合。
DataGridViewCell 类的属性
- Value: 单元格的实际值。
- Selected: 是否被选中。
- RowIndex: 所在行的索引。
- OwningRow: 所属的行。
- OwningColumn: 所属的列。
- ColumnIndex: 所在列的索引。
- FormattedValue: 显示格式化后的值。
- FormattedValueType: 格式化值的类型。
- ValueType: 单元格值的数据类型。
3.一个简单的示例,连接SQL数据库示例
using System.Data;
using WinFormsTest.Helper;namespace WinFormsTest
{public partial class frmDataGridView : Form{public frmDataGridView(){InitializeComponent();}private void frmDataGridView_Load(object sender, EventArgs e){string sql = "select * from UserInfo";DataTable dt = DBHelper.GetDataTable(sql, 1);dataGridView1.AutoGenerateColumns = false;dataGridView1.DataSource = dt;}private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e){DataGridViewCell cell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex];string nameUser = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString();if (cell.FormattedValue.ToString() == "删除"){MessageBox.Show("删除了:" + nameUser);}else if (cell.FormattedValue.ToString() == "修改"){MessageBox.Show("修改了:" + nameUser);}}}
}

4.DataGridView 数据源
- DataGridView可以绑定不同类型的数据源,包括
DataTable、List<T>、BindingList<T>等。 - 绑定到
List<T>时,每个T的实例对应DataGridView的一行。 DataBoundItem属性返回当前行绑定的对象,例如,DataGridViewRow.DataBoundItem将返回绑定列表中的相应对象。
绑定方式
- DataTable:
- 使用
DataTable作为数据源时,每行数据通过DataRow对象表示。 - 对于大量数据,DataTable可能是较好的选择,因为它内置了很多对数据操作的支持。
- 使用
- List:
- 当使用
List<T>作为数据源时,数据以对象列表的形式存在。 - 对于处理实体对象集合,尤其是当数据量不大的情况下,
List<T>是一个合适的选择。
- 当使用
优化建议
- 当数据量大时,推荐使用
DataTable,因为它被设计用来处理大批量数据。 - 对于小量数据或者需要表示复杂对象时,
List<T>更合适,因为它可以直接与对象的属性相绑定。 SqlDataReader一次只读取一行数据,并且是只进的,适合大批量数据读取,但在Windows Forms中,直接将SqlDataReader的数据转换为List<T>后再绑定到DataGridView会更加灵活。
精彩推荐:
【C#进阶一】C#中的数组(Array)、集合(ArrayList,Queue,Stack, HashList)、List<T>、字典(Dictionary<K,T>)和双向链表LinkedList
【C#进阶八】C#中的序列化与反序列化下(二进制序列化、XML序列化及JSON序列化)
【C#进阶】C#语法中一些常用知识点总结
【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox
【WinForm详细教程三】WinForm中的NumericUpDown、PictureBox、RichTextBox及三种Timer控件
【WinForm详细教程四】WinForm中的ProgressBar 、ImageList和ListView控件
【WinForm详细教程五】WinForm中的MenuStrip 、ContextMenuStrip 、ToolStrip、StatusStrip控件
【WinForm详细教程六】WinForm中的GroupBox和Panel 、TabControl 、SplitContainer控件
【C#进阶】C#中的委托、事件、回调函数、匿名函数和lambda表达式
希望有所帮助,同时欢迎关注我,后面将更新更多相关内容!
相关文章:
【WinForm详细教程七】WinForm中的DataGridView控件
文章目录 1.主要属性DataSource行(Row 相关属性)列(Column 相关属性)单元格(Cell 相关属性)逻辑删除AllowUserToAddRowsAllowUserToDeleteRowsAllowUserToOrderColumns其他布局和行为属性 2.控件中的行、列…...
SpringCloudTencent(上)
SpringCloudTencent 1.PolarisMesh介绍2.北极星具备的功能3.北极星包含的组件4.功能特性1.服务管理1.服务注册2.服务发现3.健康检查 2.配置管理 5.代码实战1.环境准备2.服务注册与发现3.远程调用 1.PolarisMesh介绍 1.北极星是腾讯开源的服务治理平台,致力于解决分…...
linux硬盘挂载(linux 修改某个磁盘挂载到新目录)
文章目录 什么是硬盘挂载linux 修改某个磁盘挂载到新目录 什么是硬盘挂载 在Linux操作系统中,挂载硬盘是将硬盘的分区或者整个硬盘与文件系统关联起来,使得我们可以通过文件系统访问硬盘中的数据。 确认硬盘信息 sudo fdisk -l该命令会列出所有已连接…...
hdlbits系列verilog解答(always块case语句)-33
文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 Verilog 中的 case 语句几乎等同于 if-elseif-else 序列,该序列将一个表达式与其他表达式列表进行比较。它的语法和功能与 C 中的 switch 语句不同。 always @(*) begin // This is a combinational circuit …...
3D医学三维技术影像PACS系统源码
一、系统概述 3D医学影像PACS系统,它集影像存储服务器、影像诊断工作站及RIS报告系统于一身,主要有图像处理模块、影像数据管理模块、RIS报告模块、光盘存档模块、DICOM通讯模块、胶片打印输出等模块组成, 具有完善的影像数据库管理功能,强大…...
python 之softmx 函数
文章目录 总的介绍小应用 总的介绍 Softmax函数是一个常用的激活函数,通常用于多类别分类问题中。它将一个实数向量转换为概率分布。这个函数的输出是一个概率分布,表示输入样本属于每个可能类别的概率。 给定一个具有 (K) 个不同数值的实数向量 z (z1…...
第3章_基本select语句
文章目录 SQL概述SQL背景知识SQL分类 SQL语言的规则与规范SQL语言的规则SQL大小写规范注释命令规则(暂时了解)数据导入指令 基本的select语句select ...select ... from列的别名去除重复行空值参与运算着重号查询常数 显示表结构讲课代码课后练习 SQL概述…...
GPT3.5+文心一言+chatGLM 计算和代码生成能力简单对比
chatGLM3刚发布(10.27),打算尝试一下其code和计算能力。 共选取三个问题,难度从中等,偏困难,到困难。测试内容是正好手头上在做的事想让LLM来完成(偷懒),之前都是直接使…...
手搓一个ubuntu自动安装python3.9的sh脚本
#!/bin/bash# Step 1: 更新系统软件包 sudo apt update sudo apt upgrade -y sudo apt install -y software-properties-common# Step 2: 安装Python 3.9的依赖项 sudo apt install -y build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libread…...
volte使用方法 nodejs版本切换
Volta 一种轻松管理 JavaScript 命令行工具的方法。 文档 https://docs.volta.sh/guide/ 源码 https://github.com/volta-cli/volta 命令行 安装版本 此方法运行完会配置为默认版本 volta install node 安装最新版本的node volta install node14 安装指定版本的node volta i…...
Oracle安全基线检查
一、账户安全 1、禁止SYSDBA用户远程连接 用户具备数据库超级管理员(SYSDBA)权限的用户远程管理登录SYSDBA用户只能本地登录,不能远程。REMOTE_LOGIN_PASSWORDFILE函数的Value值为NONE。这意味着禁止共享口令文件,只能通过操作系统认证登录Oracle数据库。 1)检查REMOTE…...
@Slf4j将日志记录到磁盘和数据库
文章目录 1、背景介绍2、存本地2.1、配置文件2.2、使用 3、存数据库3.1、配置文件改造3.2、过滤器编写3.3、表准备3.4、添加依赖3.5、测试 4、优化4.1、日志定期删除 1、背景介绍 现在我一个SpringBoot项目想记录日志,大概可以分为下面这几种: 用户操作…...
2023年中国制糖行业研究报告
第一章 行业概况 1.1 定义 制糖行业是指以甘蔗、甜菜等为主要原料,通过一系列的工艺流程,生产糖以及相关副产品的产业。它是食品工业的重要组成部分,为人们日常生活中的甜蜜体验提供了必不可少的物质基础。 主要原料: 制糖行业…...
从使用的角度看 ByConity 和 ClickHouse 的差异
自 ClickHouse Inc 宣布其重要新功能仅在 ClickHouse Cloud 上开放以来,一些关注 ByConity 开源的社区小伙伴也来询问 ByConity 后续开源规划。为回答社区疑问,我们将之前分享的关于 ByConity 与 ClickHouse 相关功能对比的 webinar 整理为文章ÿ…...
Eureka处理流程
1、Eureka Server服务端会做什么 1、服务注册 Client服务提供者可以向Server注册服务,并且内部有二层缓存机制来维护整个注册表,注册表是Eureka Client的服务提供者注册进来的。 2、提供注册表 服务消费者用来获取注册表 3、同步状态 通过注册、心跳机制…...
排序算法
文章目录 P1271 【深基9.例1】选举学生会选择排序、冒泡排序、插入排序快速排序排序算法的应用[NOIP2006 普及组] 明明的随机数[NOIP2007 普及组] 奖学金P1781 宇宙总统 #mermaid-svg-Zo8AMme5IW1JlT6K {font-family:"trebuchet ms",verdana,arial,sans-serif;font-s…...
华为政企光传输网络产品集
产品类型产品型号产品说明 maintainProductEA5800-X15 典型配置 上行160G 下行64口GPON 16口XGS PONEA5800系列多业务接入设备定位为面向NG-PON的下一代OLT,基于分布式架构,运用虚拟接入技术,为用户提供宽带、无线、视频回传等多业务统一承…...
四路IC卡读卡器通信协议
1、摘要 Sle4442卡为256字节加密卡,存在读数据、写数据、保护数据以及密码操作。该卡在密码验证之前数据为只读状态,需要写入数据必须先进行密码验证,密码为3个字节,新卡初始密码为0xff,0xff,0xff。该读卡器…...
JavaFX作业
前言: 在写这个作业之前,尝试在JavaFX中添加全局快捷键,测试了大概5个小时,到处找教程换版本,结果最后还是没找到支持Java8以上的(也有可能是我自己的问题),最后只能退而求其次&…...
【使用Python编写游戏辅助工具】第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具
前言 这里是【使用Python编写游戏辅助工具】的第五篇:打造交互式游戏工具界面:PySide6/PyQT高效构建GUI工具。本文主要介绍使用PySide6来实现构建GUI工具。 在前面,我们实现了两个实用的游戏辅助功能: 由键盘监听事件触发的鼠标连…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
