【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可以绑定不同类型的数据源,包括DataTableList<T>BindingList<T>等。
  • 绑定到List<T>时,每个T的实例对应DataGridView的一行。
  • DataBoundItem属性返回当前行绑定的对象,例如,DataGridViewRow.DataBoundItem将返回绑定列表中的相应对象。
绑定方式
  1. DataTable:
    • 使用DataTable作为数据源时,每行数据通过DataRow对象表示。
    • 对于大量数据,DataTable可能是较好的选择,因为它内置了很多对数据操作的支持。
  2. 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表达式
希望有所帮助,同时欢迎关注我,后面将更新更多相关内容!

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

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

相关文章

【Linux进程】进程地址空间

目录 程序地址空间回顾 进程地址空间 宏观理解 谈细节 1、进程地址空间究竟是什么&#xff1f; 2、管理地址空间 3、页表 总结几个问题&#xff1a; 1、为什么要有进程地址空间&#xff1f; 2、进程切换 3、进程具有独立性&#xff0c;怎么做到的&#xff1f; 程序地…

axios 全局错误处理和请求取消

这两个功能都是用拦截器实现。 前景提要&#xff1a; ts 简易封装 axios&#xff0c;统一 API 实现在 config 中配置开关拦截器 全局错误处理 在构造函数中&#xff0c;添加一个响应拦截器即可。在构造函数中注册拦截器的好处是&#xff0c;无论怎么实例化封装类&#xff0c…

改进的yolov5

The networkstructure of these models is constant, but the modules and con-volution kernels are scaled, which alters the complexity and sizeof each model.&#xff08;这些模型的网络结构是恒定的&#xff0c;但模块和卷积核被缩放&#xff0c;这改变了每个模型的复杂…

node版本管理神器|nvm安装使用教程

文章目录 导文安装前提下载安装包进行安装第一步&#xff0c;下载安装包&#xff0c;[nvm下载地址](https://github.com/coreybutler/nvm-windows/releases)第二步&#xff0c;进行安装&#xff0c;点击nvm-setup.exe文件&#xff0c;接受用户协议第三步&#xff0c;选择安装目…

​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?

在当今汽车行业中&#xff0c;随着消费者偏好的多样化和年轻化&#xff0c;汽车制造商们正面临着前所未有的挑战与机遇。在2023年上海车展上&#xff0c;起亚汽车公司正式发布了全新紧凑级SUV——赛图斯。这款车型不仅标志着起亚对年轻消费市场的深入洞察&#xff0c;也展现了公…

Chatgpt批量改写文章网页版可多开软件-自动登录换号生成word或者TXT

Chatgpt批量改写文章网页版可多开软件介绍&#xff1a; 1、改写后生成docx格式文档和生成txt文档二选一。 2、支持原来docx文档里带图片的改写&#xff0c;改写伪原创后的docx里也带图片。 3、软件可以设置是否开启标题改写&#xff0c;可以自定义标题改写指令。 4、可以设置…

CVE-2023-34040 Kafka 反序列化RCE

漏洞描述 Spring Kafka 是 Spring Framework 生态系统中的一个模块&#xff0c;用于简化在 Spring 应用程序中集成 Apache Kafka 的过程&#xff0c;记录 (record) 指 Kafka 消息中的一条记录。 受影响版本中默认未对记录配置 ErrorHandlingDeserializer&#xff0c;当用户将容…

2023 现阶段H5的机型适配

个人愚见 现在的主流体验&#xff0c;是大屏手机展示更多的内容&#xff0c;并不着重于放大展示&#xff0c; 所以&#xff0c;外层布局使用vw,百分比&#xff0c;flex&#xff0c;内层直接px就行 比如微信服务页面&#xff0c;大屏下展示更多数据

海外服务器和国内的几大差别!如何选择一款优质的海外服务器?

随着互联网的普及&#xff0c;越来越多的企业或者个人都在搭建自己的网站&#xff0c;而对于搭建网站来说&#xff0c;选择一款合适的服务器显得至关重要。那么许多小伙伴可能都在纠结的一个问题是&#xff0c;海外服务器和国内服务器有什么区别&#xff1f;我们是否应该选择一…

http中的Content-Type类型

浏览器的Content-Type 最近在做web端下载的时候需要给前端返回一个二进制的流&#xff0c;需要在请求头中设置一个 writer.Header().Set("Content-Type", "application/octet-stream")那么http中的Content-Type有具体有哪些呢&#xff1f;他们具体的使用场…

消息中间件-RabbitMQ介绍

一、基础知识 1. 什么是RabbitMQ RabbitMQ是2007年发布&#xff0c;是一个在AMQP(高级消息队列协议)基础上完成的&#xff0c;简称MQ全称为Message Queue, 消息队列&#xff08;MQ&#xff09;是一种应用程序对应用程序的通信方法&#xff0c;由Erlang&#xff08;专门针对于大…

HarmonyOS 数据管理与应用数据持久化(二)

通过键值型数据库实现数据持久化 场景介绍 键值型数据库存储键值对形式的数据&#xff0c;当需要存储的数据没有复杂的关系模型&#xff0c;比如存储商品名称及对应价格、员工工号及今日是否已出勤等&#xff0c;由于数据复杂度低&#xff0c;更容易兼容不同数据库版本和设备…

win中安装nvm进行Node版本控制

之前有安装node.js安装包的需要先给卸载掉先通过官网下载安装包nvm-setup.zip nvm官网地址命令行打开输入nvm -v&#xff0c;测试安装是否成功 此时如果进行node相关版本安装的话&#xff0c;可能下载速度过慢&#xff0c;此时需要更换镜像源。 斜体样式找到nvm的安装路径 &am…

Java智慧工地管理平台可视化大数据建造工地APP源码

建筑行业是国民经济的重要物质生产部门和支柱产业之一&#xff0c;同时&#xff0c;建筑业也是一个安全事故多发的高危行业。如何加强施工现场安全管理、降低事故发生频率、杜绝各种违规操作和不文明施工、提高建筑工程质量&#xff0c;是摆在各级政府部门、施工企业面前的一道…

CRM软件如何高效培育销售线索?

​ 通过线索培育可以挖掘出更多CRM软件销售管道中的有价值客户提高销售业绩。但机遇与挑战总是共存的&#xff0c;培育线索要从不同的渠道执行大量重复性的操作&#xff0c;人为操控不仅速度慢而且容易出错&#xff0c;那么企业如何高效培育销售线索? 发送个性化邮件 我们知…

时间序列预测模型实战案例(八)(Informer)个人数据集、详细参数、代码实战讲解

论文地址->Informer论文地址PDF点击即可阅读 代码地址-> 论文官方代码地址点击即可跳转下载GIthub链接 本文介绍 本篇博客带大家看的是Informer模型进行时间序列预测的实战案例&#xff0c;它是在2019年被提出并在ICLR 2020上被评为Best Paper&#xff0c;可以说Inform…

5.网络之IP

IP协议&#xff08;网络层&#xff09; 文章目录 IP协议&#xff08;网络层&#xff09;1. 报文格式2. IP地址2. 地址管理3. 特殊IP地址 IP协议&#xff08;Internet Protocol&#xff0c;互联网协议&#xff09;&#xff0c;是TCP/IP协议栈中最核心的协议之一&#xff0c;通过…

wordpress版本识别

wordpress版本识别 1.通过RSS Feed识别 RSS Feed参考 访问网站/feed或者?feedrss 例如 默认结构&#xff1a;https://www.example.com/?feedrss2 其他结构&#xff1a;https://www.example.com/feed/ 返回结果中搜索 generator 可以看到直接是5.9.7版本 2.wpscan等工具扫一…

STM32 IIC 实验

1. 可以选择I2C1&#xff0c;也可以选择I2C2&#xff0c;或者同时选择&#xff0c;同时运行 配置时钟信号 为节约空间&#xff0c;选择这两个&#xff0c;然后选择GENERATE CODE 二、HAL_I2C_Mem_Write I2C_HandleTypeDef *hi2c&#xff1a;I2C设备句柄 uint16_t DevAddress&am…

Android Studio(RecyclerView)

前言 ListView的缺点&#xff0c;在RecyclerView得到了补充改善&#xff08;横纵向排列子元素、多列布局等等&#xff09; 代码 前面在适配器章节已经介绍了其对应的适配器&#xff0c;这里就简单展示一下多列布局的页面效果和相关代码 <androidx.recyclerview.widget.Recyc…