【WinForm详细教程七】WinForm中的DataGridView控件

news2024/11/26 17:43:53

文章目录

      • 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.coloradmin.cn/o/1170587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

昨天面了个哥们,也就问了4个问题,但好像他被我虐了···

公司最近在招自动化测试岗&#xff0c;居然一天内就收了几百份简历&#xff01;想不到吧&#xff1f;&#xff01;都快面吐了&#xff0c;想招一个合适的技术同学太不容易了&#xff0c;需要去挖的细节太多了。一般来说&#xff0c;很多人都会被问接口工具、aap自动化、测试框架…

Docker Swarm实现容器的复制均衡及动态管理:详细过程版

Swarm简介 Swarm是一套较为简单的工具&#xff0c;用以管理Docker集群&#xff0c;使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口&#xff0c;换言之&#xff0c;各种形式的Docker Client(dockerclient in go, docker_py…

YOLO算法改进6【中阶改进篇】:depthwise separable convolution轻量化C3

常规卷积操作 对于一张55像素、三通道&#xff08;shape为553&#xff09;&#xff0c;经过33卷积核的卷积层&#xff08;假设输出通道数为4&#xff0c;则卷积核shape为3334&#xff0c;最终输出4个Feature Map&#xff0c;如果有same padding则尺寸与输入层相同&#xff08;…

基于设深度学习的人脸性别年龄识别系统 计算机竞赛

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习机器视觉的…

R语言657中单色colors颜色索引表---全平台可用

R语言657中单色colors颜色索引表—全平台可用

记一次pdjs时安装glob出现,npm ERR! code ETARGET和npm ERR! code ELIFECYCLE

如往常一样&#xff0c;我使用pdjs来编译proto文件&#xff0c;但出现了以下报错&#xff1a; 大致就是pdjs的util在尝试执行npm install glob^7.2.1 escodegen^1.13.0时出错了 尝试手动执行安装&#xff0c;escodegen被正确安装&#xff0c;但glob^7.2.1出错 npm ERR! code E…

Adobe:受益于人工智能,必被人工智能反噬

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;Adobe(ADBE)受益于生成式人工智能的兴起&#xff0c;其一直能实现两位数的收入增长就证明了这一点。 &#xff08;2&#xff09;在生成式人工智能兴起时&#xff0c;该公司就快…

苏州景点梳理(含交通方式)

第一优先级第二优先级 区域名称备注交通需预约/费用市区&#xff1a;苏州博物馆周一闭馆地铁预约拙政园包含太平天国忠王府地铁预约&#xff0c;收费狮子林地铁预约&#xff0c;收费苏州博物馆(西馆)地铁预约北寺塔地铁七里山塘&#xff08;山塘街&#xff09;石路商圈吃饭地铁…

orangepi one nfs启动

先制作好启动tf卡&#xff0c;之后为了快速调试&#xff0c;可以通过nfs替换内核与设备树&#xff0c;无需重新制作启动tf卡。 开发板需要连接网线&#xff0c;uboot默认的网卡驱动在orangepi one上是可以使用的。 下面是nfs启动的步骤&#xff1a; 1、启动开发版&#xff0…

如何解决el-dialog弹窗上面有一层黑色蒙层?

这种情况百分之90%是因为弹窗嵌套弹窗造成的&#xff0c;我遇到的情况是这样的&#xff0c;解决方法是给内层el-dialog加上append-to-body属性&#xff0c;下面是简化后的示例 <el-dialog title"外层 Dialog" :visible.sync"outerVisible"><el-d…

Adobe acrobat 11.0版本 pdf阅读器修改背景颜色方法

打开菜单栏&#xff0c;编辑&#xff0c;首选项&#xff0c;选择辅助工具项&#xff0c;页面中 勾选 替换文档颜色&#xff0c;页面背景自己选择一个颜色&#xff0c;然后确定&#xff0c;即可&#xff01;

CentOs7搭建基于pptp的VPN服务器

最近想远程连接一下家里的台式机电脑&#xff0c;由于都是局域网&#xff0c;又没有公网ip&#xff0c;所以就没法远程。上网查了一下&#xff0c;发现可以在云服务器上搭建一个VPN&#xff0c;这样两台电脑就在同一个局域网内&#xff0c;就可以完美解决这个问题。现在把搭建方…

【linux常用命令+vi编辑器_2023.11.3】

芯片开发 Linux/Unix&#xff08;环境&#xff09; EDA工具TCL&#xff08;波形&#xff09; SVN/GIT&#xff08;版本控制&#xff09; Makefile&#xff08;脚本语言&#xff09; Perl/Python&#xff08;脚本语言&#xff09; Vim/Gvim&#xff08;编辑器&#xff09; 命令…

基于非洲秃鹫算法的无人机航迹规划-附代码

基于非洲秃鹫算法的无人机航迹规划 文章目录 基于非洲秃鹫算法的无人机航迹规划1.非洲秃鹫搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用非洲秃鹫算法来优化无人机航迹规划。 …

《C/C++代码审计实践》一书出版了

我撰写了代码审计一书&#xff0c;包括了C、C、Java语言&#xff0c;加起来有600多页&#xff0c;书籍太厚&#xff0c;印刷成本比较高&#xff0c;出版社对于代码审计将来的销量也有所担心&#xff0c;他们更担心的在书中涉及到了对国家标准的解读&#xff0c;尤其是国家军用标…

Windows 11 开启启用 Hyper-V选项

Hyper-V 是微软开发的基于硬件的虚拟机管理程序。它允许用户在 Windows 操作系统之上运行不同操作系统的多个实例。目前&#xff0c;Hyper-V 也支持 Windows、Ubuntu 和其他 Linux 发行版。 如果发现跟我电脑一样没有启用Hyper-V选项可以按照以下步骤进行操作。 一、新建一个t…

该虚拟机似乎正在使用中。如果该虚拟机未在使用,请按“获取所有权(T)”按钮获取它的所有权。否则,请按“取消(C)”按钮以防损坏。

问题描述 该虚拟机似乎正在使用中。 如果该虚拟机未在使用&#xff0c;请按“获取所有权(T)”按钮获取它的所有权。否则&#xff0c;请按“取消©”按钮以防损坏。 配置文件: D:\RedHat\Red Hat Enterprise Linux 8 64 位.vmx。 获取所有权&#xff1a; 看到这里我的心凉…

阿里云宣布“云工开物计划”:给中国所有大学生每人送一台云服务器

在2023云栖大会上&#xff0c;阿里云CTO周靖人表示&#xff0c;面向智能时代&#xff0c;阿里云将通过从底层算力到AI平台再到模型服务的全栈技术创新&#xff0c;升级云计算体系&#xff0c;打造一朵AI时代最开放的云。 在现场&#xff0c;周靖人公布了云计算基础能力的最新进…

Jmeter分布式测试的注意事项和常见问题

Jmeter是一款开源的性能测试工具&#xff0c;使用Jmeter进行分布式测试时&#xff0c;也需要注意一些细节和问题&#xff0c;否则可能会影响测试结果的准确性和可靠性。 Jmeter分布式测试时需要特别注意的几个方面 1. 参数化文件的位置和内容 如果使用csv文件进行参数化&…

nvm安装教程(一篇文章所有问题全搞定,非常详细)

nvm 是什么&#xff1f; nvm 是一款 nodejs 版本管理工具&#xff0c;通过 nvm 可以简化我们切换 nodejs 版本的操作。 nvm 的安装流程 一、首先进入 nvm 的官网下载安装包 官网地址&#xff1a;http://nvm.uihtm.com 找到自己系统对应的版本进行下载&#xff0c;以下以 w…