当前位置: 首页 > news >正文

C#高级:DataGridView的详解

一、每条数据增加一个按钮,点击输出对应实体

请先确保正确添加实体的名称和文本:

private void button6_Click(object sender, EventArgs e)
{//SQL查询到数据,存于list中List<InforMessage> list = bll.QueryInforMessage();//含有字段:Title PublishTime UserName Content// 清空现有数据dataGridView1.Rows.Clear();//添加数据foreach (var item in list){//绑定数据,注意你的不一定是dataGridView1int rowIndex = dataGridView1.Rows.Add();dataGridView1.Rows[rowIndex].Cells["Title"].Value = item.Title;dataGridView1.Rows[rowIndex].Cells["PublishTime"].Value = item.PublishTime;dataGridView1.Rows[rowIndex].Cells["UserName"].Value = item.UserName;dataGridView1.Rows[rowIndex].Cells["Content"].Value = "点击查看";//按钮名称// 将数据实体关联到行的 Tag 属性上以便后续处理dataGridView1.Rows[rowIndex].Tag = item;}
}// 在 DataGridView 的 CellContentClick (点击某一单元格)事件中处理内容按钮点击事件
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{if (e.ColumnIndex == dataGridView1.Columns["Content"].Index && e.RowIndex >= 0)//若点击了标签为【Content】列的按钮{// 获取当前行对应的实体对象【注意修改此处InforMessage类】var item = dataGridView1.Rows[e.RowIndex].Tag as InforMessage;//将list实体中的content展示出来if (item != null){MessageBox.Show(item.Content, "内容详情");}}
}

 二、输出选中的实体信息

【代码如下】

 private void Form1_Load(object sender, EventArgs e){//sql查表List<Student> list = bll.QueryStudent();// 清空现有数据dataGridView1.Rows.Clear();//添加数据foreach (var item in list){int rowIndex = dataGridView1.Rows.Add();dataGridView1.Rows[rowIndex].Cells["ID"].Value = item.ID;dataGridView1.Rows[rowIndex].Cells["Name"].Value = item.Name;dataGridView1.Rows[rowIndex].Tag = item;}}private void button1_Click(object sender, EventArgs e)//点击触发{//获取选中的实体(在窗体上定义好了)var result = selectedStudent;}private void dataGridView1_SelectionChanged(object sender, EventArgs e)//选中触发{if (dataGridView1.SelectedRows.Count > 0){DataGridViewRow selectedRow = dataGridView1.SelectedRows[0];selectedStudent = (Student)selectedRow.Tag;//获取选中的实体}else{selectedStudent = null;}}

 三、小结

1.增:  建议用textbox、combobox等工具增,而不是直接datagridview新增,一来麻烦,二来输入工具不能多样化。

2.删:建议如标题一,每条数据加一个删除按钮,方便操作

3.改:建议如标题二,选中某条数据然后将数据信息转移到textbox上,label显示“您已选中xxx数据”,然后点击button去修改相应信息(选中数据和点击按钮都能获取到对应实体)

4.查:同第2条

5.如果单纯用datagridview作增删查改,虽然能实现,但是代码复杂难以维护,而且输入条件单一,容易操作失误,不建议这么做。

相关文章:

  • 练习2-线性回归迭代(李沐函数简要解析)
  • 命令行启动mongodb服务器的问题及解决方案 -- Unrecognized option: storage.journal
  • springboot 实现本地文件存储
  • SD NAND:为车载显示器注入智能与安全的心脏
  • selenium测试工具用来模拟用户浏览器的操作
  • MySQL常见面试题总结
  • Node.js基础---Express中间件
  • 利用 lxml 库的XPath()方法在网页中快速查找元素
  • kvm虚拟机修改网络模式
  • MySQL进阶之(三)InnoDB数据存储结构之数据页结构
  • SpringBoot源码解读与原理分析(三十八)SpringBoot整合WebFlux(一)WebFlux的自动装配
  • 利用FFMPEG 将RTSP流的音频G711 转码为AAC 并 推流到RTMP
  • Git源码管理
  • docker 基础(二)
  • 民爆5G智能制造工厂数字孪生可视化平台,推进民爆工业数字化转型
  • ECS应用管理最佳实践
  • ES6系统学习----从Apollo Client看解构赋值
  • HashMap剖析之内部结构
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • opencv python Meanshift 和 Camshift
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • SQLServer之索引简介
  • vue-router 实现分析
  • vue中实现单选
  • 订阅Forge Viewer所有的事件
  • 多线程 start 和 run 方法到底有什么区别?
  • 飞驰在Mesos的涡轮引擎上
  • 后端_ThinkPHP5
  • 机器学习学习笔记一
  • 一、python与pycharm的安装
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​如何在iOS手机上查看应用日志
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (07)Hive——窗口函数详解
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (南京观海微电子)——I3C协议介绍
  • (十) 初识 Docker file
  • (原創) 未来三学期想要修的课 (日記)
  • (转)Google的Objective-C编码规范
  • ../depcomp: line 571: exec: g++: not found
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .NET 反射的使用
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET框架设计—常被忽视的C#设计技巧
  • :O)修改linux硬件时间
  • @hook扩展分析