DataGridView控件中显示图片及其注意事项 【z】

windows Forms编程里面有一个DataGridView控件,它不光是可以显示数据,可以显示按钮,复选框,甚至还可以显示图片。这些图片可以来自于数据库(用二进制的方式存储的),也可以来自文件系统。下面是一个例子

【假设你有一个windows程序,并且窗体上有一个DataGridView控件,这个控件只有一个列(名称为Image),类型为DataGridViewImageColumn】

 

public Form1()
{InitializeComponent();GetData();}private void GetData()
{foreach (string s in Directory.GetFiles(@"E:\My Documents\图片收藏\表情","*.gif")){this.demoGrid.Rows.Add(s);//注意,虽然字段类型是Image,但我们这里只给它传一个图片路径过去,真正读取图片是由下面的事件处理程序做的
    }
}

 

/// <summary>
/// 这个事件就在尝试对单元格进行格式化的时候触发。在这里设置真正的图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void demoGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{if (demoGrid.Columns[e.ColumnIndex].Name.Equals("Image")){string path = e.Value.ToString();e.Value = GetImage(path);}
}public System.Drawing.Image GetImage(string path)
{return System.Drawing.Image.FromFile(path);
}

 

以上的代码确实可以实现我们的目的,就是从一个目录中把所有的gif图片读取出来,然后显示在DataGridView上面。如下图所示

image

但是用Image.FromFile这个语法加载图片有一个很大的问题:该文件就被我们当前进程锁定了。不光是别的程序无法使用它,如果当前程序需要将其删除(例如我们想删除某行数据的同时把图片也删除掉),都会报告一个错误

image

为了解决这个问题,可以修改一下GetImage方法。如下面所示

public System.Drawing.Image GetImage(string path)
{System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open);System.Drawing.Image result = System.Drawing.Image.FromStream(fs);fs.Close();return result;}

 

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

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

相关文章

在winform上内嵌入其它的程序

这段代码很有意义,用于把一个程序的界面嵌入到我们自己程序的某个指定窗体上. 比如在某个项目里,我需要把基恩士的激光扫描轮廓显示给客户看,但是激光的DLL中并没有这种功能提供. 于是我想先启动激光的官方程序用以显示轮廓, 然后再把这种显示界面嵌入到我自己程序的界面上指定…

SPI总线时序

SPI&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;同时为PCB的布局上节省空间&#xff0c;提供方便&#xff0c;正是出于这种简单易用的特性&#xff0c;现在越来…

js计算浮点数出现小数;解决js计算小数问题;js数组相加出现小数;

原博1 原博2 方案1和方案2都是有效的 注意参数一定要是数字 而不能是字符串 否则会计算错误 情景&#xff1a; 在计算浮点数时候&#xff0c;出现多余小数。 例如&#xff1a; 1.11 1 2.1100000000000003 为什么计算小数会出现误差&#xff1f; 浮点数值的最高进度是17位…

Shell脚本中获取本机ip地址的3个方法

From: http://www.jb51.net/article/56585.htm 这篇文章主要介绍了Shell脚本中获取本机ip地址的3个方法,本文直接给出实现代码,需要的朋友可以参考下方法一&#xff1a; 复制代码 代码如下:/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk {print $2}|tr -d…

VMware安装系统时没有弹出分区设置

在安装虚拟机系统的时候&#xff0c;有时候会遇到在安装一些镜像时没有弹出分区设置的画面&#xff0c;比如&#xff0c;我在使用 VMware 安装 CentOS 的时候&#xff0c;在选择完镜像&#xff0c;设置好启动安装的时候系统自动为我划分了 3 个分区&#xff1a;/boot、/、swap分…

如何在postgresql中模拟oracle的dual表,来测试数据库最基本的连接功能?

还好&#xff0c;网上弄到的&#xff0c;&#xff0c;没有dual的数据库&#xff0c;可以试图用select函数不带from数据表的方式来实现返回值。 一段测试代码&#xff1a; try:conn psycopg2.connect(databasedb.service_name, userdb.username, passwordpassword, hostdb.ip, …

Linux 系统如何查看硬盘UUID与修改

一、查看 1. sudo blkid 2. ls -l /dev/disk/by-uuid 3. tune2fs -l /dev/sdb 二、修改与恢复 uuidgen 会返回一个合法的 uuid&#xff0c;结合 tune2fs 可以新生成一个 uuid 并写入 ext2,3,4 分区中&#xff1a; 比如新建或改变 sda5 的 uuid &#xff08;需要 root 权限…

vue+element实现树状表格的增删改查;使用el-table树形数据与懒加载实现树状表格增删改查

以下代码可以直接复制使用 一、情景&#xff1a; 列表是一个树状表格&#xff0c;可以无限添加下级&#xff0c;以及对列表的某一行进行增删改查&#xff08;目前查没有写&#xff09;。 原博链接 二、本篇是在原博主的代码基础上添加了部分功能。 功能1&#xff1a; 给树状表格…

定时任务 Crontab命令 详解

From: http://www.centoscn.com/CentOS/help/2014/1030/4025.html 前言 crontab是Unix和Linux用于设置周期性被执行的指令&#xff0c;是互联网很常用的技术&#xff0c;很多任务都会设置在crontab循环执行&#xff0c;如果不使用crontab&#xff0c;那么任务就是常驻程序&…

Web Js 按键事件……Enter提交事件 Enter Js事件

$(document).ready(function(){document.onkeydown function (event){ if (event.keyCode13) //回车键的键值为13 submit();}; });$(document).ready(funtion) 可以简写为 ↓ $(function(){});转载于:https://www.cnblogs.com/blogs2014/p/5789256.html

ISCSI 1-由零开始

iSCSI的概念 iSCSI&#xff0c;即Internet SCSI&#xff0c;是IETF制订的一项标准&#xff0c;用于将SCSI数据块映射为以太网数据包。从根本上说&#xff0c;它是一种基于IP Storage理论的新型存储技术&#xff0c;该技术将存储行业广泛应用的SCSI接口技术与IP网络技术相结合&a…

js获取当前日期并格式化(多种格式)

获取当前日期的格式&#xff1a;2022-01-07 或者 2022/01/07 或者 2022-01-07 12:00:00 或者 2022/01/07 12:00:00 原博链接 方法1&#xff1a; // 对Date的扩展&#xff0c;将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个…

为什么移动硬盘的实际容量比标注容量小

很多网友都反映&#xff0c;自己的移动硬盘实际容量并没有厂商标注的容量大&#xff0c;都怀疑自己是不是被坑了&#xff0c;其实不是的&#xff0c;小编现在为你解密为何硬盘实际容量小于标注容量的问题。对于此种情况&#xff0c;有多方面原因导致1.对于存储容量的计算&#…

bash: mail: command not found的解决方法

From: http://hxl2009.blog.51cto.com/779549/884569 近日&#xff0c;安装了一个最小化的centos 6.2 64bit&#xff0c;系统中显示有root用户的mail&#xff0c;想用mail命令查看相关信件&#xff0c; 但发现一个问题&#xff1a; -bash: mail: command not found 呵呵&#…

Who is the best at Dataset X?

推荐一个关于分类、目标检测、姿态估计的数据集收藏的网页。 Did you ever want to quickly learn&#xff1f;which paper provides the best results on standard dataset X ?Wait no more, just click below and discover the current state of the art. URL&#xff1a;ht…

存储技术与iSCSI

本章主要介绍基于IP SAN的网络存储iSCSI。iSCSI技术以其低廉的构建成本和优秀的存储性能&#xff0c;博得了很多CIO和存储管理员的喜爱&#xff0c;目前陆续进入企业应用领域&#xff0c;推动了企业的存储环境向集中式转变。虽然&#xff0c;目前对于iSCSI应该在什么样的环境中…

js判断字符串包含英文;js判断字符串包含汉字;

let str 123qwer汉字if (/.*[\u4e00-\u9fa5].*$/.test(str)) {this.alert(包含汉字)}if (/[a-zA-Z]/.test(str)) {this.alert(包含英文字母)}

lvs和HA的高可用性

Heartbeat实现Lvs高可用和HA高可用效果图如下1、heartbeat的介绍Heartbeat 项目是 Linux-HA 工程的一个组成部分&#xff0c;它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件&#xff0c;在 Heartbeat 项目里&#xff0c;由 heartbeat 模块实现了这…

postfix报错postfix: fatal: parameter inet_interfaces: no local interface found for ::1

From: http://blog.csdn.net/xiangshanqishi/article/details/23439397 启动postfix出错&#xff0c;查看centos中的postfix日志 more /var/log/maillog postfix: fatal: parameter inet_interfaces: no local interface found for ::1 vi /etc/postfix/main.cf 发现配…

Linux LVM-删除卷组逻辑卷物理卷

查看卷组相关信息 [rootlocalhost /]# vgscanReading all physical volumes. This may take a while...Found volume group "VolGroup00" using metadata type lvm2 查看卷组VolGroup00包含的PV、LV信息。 [rootlocalhost /]# vgdisplay -v VolGroup00Using volume …