实现功能如下图:

注明:此文使用的是DevExpress控件,winform 原生控件也是一样使用方法。

1.点击选择图片按钮,功能为通过对话框选择要上传的文件,并将该文件在下面的PictureEdit中显示出来。具体代码如下:

private void btnChoosePic_Click(object sender, EventArgs e){ShowPic(pictureEdit1);}/// <summary>/// 选择图片/// </summary>/// <param name="picEdit"></param>public static void ShowPic(PictureEdit picEdit){OpenFileDialog ofd = new OpenFileDialog();ofd.InitialDirectory = @"C:\";ofd.Filter = "Image Files(*.JPG;*.PNG;*.jpeg;*.GIF;*.BMP)|*.JPG;*.PNG;*.GIF;*.BMP;*.jpeg|All files(*.*)|*.*";ofd.RestoreDirectory = true;if (ofd.ShowDialog() == DialogResult.OK){PicAddress = ofd.FileName;Image imge = Image.FromFile(PicAddress);Bitmap bm = new Bitmap(imge, picEdit.Width, picEdit.Height);picEdit.Image = bm;}}

ShowPic()方法为静态方法,可以直接调用,其中的PicAddress变量为静态全局变量,用于记录要上传文件的文件地址。PictureEdit显示图片的方式,是通过PictureEdit的image属性设定的,将图片转成Bitmap格式,位图文件是最简单的图片格式。

2.上传图片,该按钮的功能是将选定的图片上传到数据库中,具体的实现代码如下:

/// <summary>/// 上传图片/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnUploadPic_Click(object sender, EventArgs e){if (PicAddress != null){if (PicType.Equals("教师")){var sqlSearch =$@"select count(*) from studentmanager.picture where PicTypeId = '{TeacherId}'and PicType='{PicType}'";var dsSearch = _db.GetResult(sqlSearch);if (dsSearch.Tables[0].Rows[0][0].ToString().Equals("0")) //没有重复的,则进行新增插入操作{byte[] pic = CommonFunction.GetContent(PicAddress);var result = _db.SavePictureToDB(pic, PicAddress, PicType, TeacherId);if (result > 0){CommonFunction.MessageShow("头像添加成功", "提示", "OK", "Information");DialogResult = DialogResult.OK;}else{CommonFunction.MessageShow("头像添加失败");}}else{//更新头像if (PicAddress.Equals(String.Empty)){CommonFunction.MessageShow("没有重新选择图片进行更新");return;}byte[] pic = CommonFunction.GetContent(PicAddress);var result = _db.UpdatePictureToDb(pic, PicAddress, PicType, TeacherId);if (result > 0){CommonFunction.MessageShow("头像更新成功", "提示", "OK", "Information");DialogResult = DialogResult.OK;}else{CommonFunction.MessageShow("头像更新失败");}}}else if(PicType.Equals("学生")){var sqlSearch =$@"select count(*) from studentmanager.picture where PicTypeId = '{StudentId}'and PicType='{PicType}'";var dsSearch = _db.GetResult(sqlSearch);if (dsSearch.Tables[0].Rows[0][0].ToString().Equals("0")) //没有重复的,则进行新增插入操作{byte[] pic = CommonFunction.GetContent(PicAddress);var result = _db.SavePictureToDB(pic, PicAddress, PicType, StudentId);if (result > 0){CommonFunction.MessageShow("头像添加成功", "提示", "OK", "Information");DialogResult = DialogResult.OK;}else{CommonFunction.MessageShow("头像添加失败");}}else{//更新头像if (PicAddress.Equals(String.Empty)){CommonFunction.MessageShow("没有重新选择图片进行更新");return;}byte[] pic = CommonFunction.GetContent(PicAddress);var result = _db.UpdatePictureToDb(pic, PicAddress, PicType, StudentId);if (result > 0){CommonFunction.MessageShow("头像更新成功", "提示", "OK", "Information");DialogResult = DialogResult.OK;}else{CommonFunction.MessageShow("头像更新失败");}}}}else{CommonFunction.MessageShow("请先选择图片!", "提示", "OK", "Error");}}

上传的过程大概就是:根据文件地址将对应文件转换成数据流二进制格式–>编写对应的SQL语句–>执行该SQL语句,将图片添加到数据库中。
上面代码中SavePictureToDB方法代码如下:

/// <summary>/// 保存图片到数据库/// </summary>/// <param name="imageByte"></param>/// <param name="Tablename"></param>/// <param name="FieldPicturename"></param>/// <param name="FieldIdxname"></param>/// <param name="FieldIdxvalue"></param>/// <returns></returns>public int SavePictureToDB(byte[] imageByte,string Picturename,string PicType,int PicTypeId){var result = 0;try{if (imageByte != null && imageByte.Length != 0){using (var conn = new MySqlConnection()){conn.ConnectionString = ConnectionString;conn.Open();var insertStr = @"INSERT INTO studentmanager.picture (Picturename, PicType, PicTypeId, imageByte)VALUES(@Picturename, @PicType, @PicTypeId, @imageByte);";var comm = new MySqlCommand();comm.Connection = conn;comm.CommandText = insertStr;comm.CommandType = CommandType.Text;//设置数据库字段类型MediumBlob的值为图片字节数组imageBytecomm.Parameters.Add(new MySqlParameter("@imageByte", MySqlDbType.MediumBlob)).Value = imageByte;comm.Parameters.Add(new MySqlParameter("@Picturename", MySqlDbType.VarChar)).Value = Picturename;comm.Parameters.Add(new MySqlParameter("@PicType", MySqlDbType.VarChar)).Value = PicType;comm.Parameters.Add(new MySqlParameter("@PicTypeId", MySqlDbType.Int32)).Value = PicTypeId;//execute sqlresult = comm.ExecuteNonQuery();comm.Dispose();conn.Close();conn.Dispose();}}}catch (Exception){// throw ex;}return result;}

3.加载图片显示到PictureEdit;

/// <summary>/// 窗口加载/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void HeadManager_Load(object sender, EventArgs e){LoadImage(PicType, PicType.Equals("教师") ? TeacherId : StudentId);}/// <summary>/// 获取图片/// </summary>/// <param name="picType"></param>/// <param name="picTypeid"></param>private void LoadImage(string picType, int picTypeid){try{var imageBytes = _db.GetImage(picType, picTypeid);var image = CommonFunction.GetImageByBytes(imageBytes);Bitmap bm = new Bitmap(image, pictureEdit1.Width, pictureEdit1.Height);pictureEdit1.Image = bm;}catch (Exception){pictureEdit1.Image = Resource.DefaultUser;}}

4.用到的公共方法:

/// <summary>/// 转换为Byte[]/// </summary>/// <param name="filepath"></param>/// <returns></returns>public static byte[] GetContent(string filepath)//将指定路径下的文件转换成二进制代码,用于传输到数据库{FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);byte[] byData = new byte[fs.Length];//新建用于保存文件流的字节数组fs.Read(byData, 0, byData.Length);//读取文件流fs.Close();return byData;}/// <summary>/// 读取byte[]并转化为图片/// </summary>/// <param name="bytes">byte[]</param>/// <returns>Image</returns>public static Image GetImageByBytes(byte[] bytes){Image photo;using (MemoryStream ms = new MemoryStream(bytes)){ms.Write(bytes, 0, bytes.Length);photo = Image.FromStream(ms, true);ms.Dispose();ms.Close();}return photo;}

C# winform DevExpress上传图片相关推荐

  1. c winform 上传文件到mysql_C# winform DevExpress上传图片到数据库【转】

    实现功能如下图: 注明:此文使用的是DevExpress控件,winform 原生控件也是一样使用方法. 1.点击选择图片按钮,功能为通过对话框选择要上传的文件,并将该文件在下面的PictureEdi ...

  2. 原创C# Winform+DevExpress皮肤框架

    基于热门C#语言研发的Winform皮肤框架,国内比较成熟的有C/S框架网四大快速开发框架产品,分别是标准版CSFramework V2.x.高级版CSFramework V3.x.企业版CSFram ...

  3. 原创C# Winform+DevExpress皮肤框架 1

    基于热门C#语言研发的Winform皮肤框架,国内比较成熟的有C/S框架网四大快速开发框架产品,分别是标准版CSFramework V2.x.高级版CSFramework V3.x.企业版CSFram ...

  4. WinForm DevExpress使用-(ChartControl控件绘制图表)

    最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...

  5. WINFORM DEVEXPRESS插件常用功能总结

    前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果.DevExpress Winform 常用控件是本人在前 ...

  6. Winform + Devexpress 实现看板效果

    环境:VS2019.Sql Server R2 2008.Devexpress ChartControl.layoutControl 最终效果: 1.设置背景图(LayoutControl) this ...

  7. html gridview绑定数据,winform,devexpress GridControl中GridView数据绑定

    当我们新建一下GridControl的时候,就会有一个默认的GridView,这时我们如何绑定数据到GridView上呢? 只需要一行代码就可绑定了,代码如下:gridControl1.DataSou ...

  8. Winform DevExpress控件库(三) 使用NavBarControl控件定制导航栏

    NavBarControl控件:主要作用是制作包含多个选项组并且每个组里包含多个子选项的导航栏: 位于 工具箱 -> Navigation & Layout(导航栏与布局类控件) 目录下 ...

  9. winform DevExpress contextMenuStrip右键事件

    //右键复制 private void contextMenuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)   ...

最新文章

  1. 入门:现实世界中的推荐系统(术语、技术等)
  2. 摩尔投票法(力扣- -229. 求众数 II)
  3. 【C语言】数据结构C语言版 实验4 栈与字符串
  4. Android中Adapter适配器的介绍以及用法的总结
  5. BerkeleyDB-JE数据库操作封装
  6. flex 布局,flex-grow 宽度未等比放大问题解决办法
  7. mysql游标嵌套怎么写,mysql游标和嵌套游标
  8. 2019 CCF 推荐 中文期刊
  9. 计算机中级职称考试答题卡,2016年软考网络工程师考试填涂答题卡(纸)须知...
  10. 借助百度识图爬取数据集
  11. 戴尔笔记本linux不能开机启动,戴尔笔记本bios设置开机启动项图解
  12. 如何用php 图片合成一张图片,PHP图片处理之多张图片合成一张的实例
  13. animejs走马灯_Javript动画特效插件anime.js
  14. COMS门电路的设计及其优化--以异或门为例
  15. 页面埋点H5 大数据uniapp 按需要更改代码就行
  16. Salesforce学习 丨3张图搞懂SFDC认证考试体系及费用,看看30多个证你要怎么考
  17. vue子组件调用父组件方法 回调
  18. 2022-2028年全球与中国老年手机行业发展趋势及竞争策略研究
  19. ORACLE 触发器控制用户登录之权限限制
  20. 图解实时操作系统和非实时操作系统的区别

热门文章

  1. 风控模型大数据挖掘竞赛
  2. springboot泛型封装开发
  3. 导入AAR报错 Failed to transform file 'xxx.aar' to match attributes {artifactType=jar}
  4. Lambda求和函数在excel上的应用
  5. 七篇文章看懂支付清算
  6. 同时删除多个 PPT 文档最后几页
  7. WIZnet工控方案
  8. 解决Fortify漏洞:Portability Flaw: Locale Dependent Comparison
  9. GAUSS创建主键,删除主键
  10. 【数据压缩实验六--MPEG】