DevExpress:报表中XRPictureBox控件绑定数据库(SQlite)中的图片数据

一.需求描述

1.使用XRPictureBox控件显示图片;
2.因为报表需求,显示的图片在指定条件下需要改变,比如:指定生成小明的报表时,加载小明的头像;指定生成小红的报表时,加载小红的头像;
3. 同时导出上述中“小明的报告”和“小红的报告”(同一报告,绑定数据库后,如果数据库中有多条信息,比如有小明和小红的信息,那么会自动生成两页报告,第一页是小明的,第二页是小红的);(绑定数据库这点可以参考这个视频,数据库不一样但原理是一样的:使用DevExpress的XtraReports控件创建员工薪资报告应用程序

二、数据库表格字段以及内容展示

在这里插入图片描述
【image】字段用于存储图片数据,字段类型自己手动输入得longtext类型(sqlite studio 软件字段里只有text),sqlite存储图片的详细方式以及图片类型在下面解释。
在这里插入图片描述

三、DevExpress XRPictureBox控件绑定数据库中图片格式的要求

DevExpress官网XRPictureBox说明文档:XRPictureBox
在这里插入图片描述
如官方文档说明:XRPictureBox控制支持绑定 编码为based64 格式的图片数据;了解完sqlite存储图片的要求后发现sqlite数据库是支持存储based64编码格式的图像数据的,正好符合要求,可以使用了。

番外剧:sqlite支出存储blob字段类型二进制图像数据以及text字段类型based64编码的图像(字符串);
参考01(不是实例):sqlite存储图片
参考02(不是实例):图片以base64格式存储进数据库 字段使用类型
参考03(sqlite存储提取blob字段类型二进制图,实例):C# 实现SQLite数据库将图片读写

四、图片转成based64编码格式数据,存入sqlite数据库

//based64编码格式的图像数据存入数据库
  public void Updata_SQL(int FileName, Image Picture)
        {
            byte[] picData = ImageToByte(Picture);  //转成二级制,对应数据库字段类型为blob;
            string picData02 = Convert.ToBase64String(picData); //继续转成baseed64,对应数据库字段类型为text类;
            SQLiteConnection conn = new SQLiteConnection("Data Source=../../../dataresource/zhucong.db;");
            string sql = "";
            conn.Open();
            SQLiteCommand cmd = new SQLiteCommand(sql, conn);
            // 直接返这个值放到数据就行了           
            sql = string.Format(@"Update student set image = @Data where student_id = '{0}'", FileName);
            cmd.CommandText = sql;
            //一般我们在进行数据库操作的时候,不推荐使用 字符串相加来构造sql语句,防止SQL注入。@Data 作为参数,再在后面,把具体的数值,传入这个参数中。
            cmd.Parameters.Add("@Data", DbType.String, picData02.Length);
            //特别注意!!! 一定要是DbType.String类型,不然devexpress XRPictureBox 会识别不出数据库中based64编码格式的图片,会无法显示,亲测。
            cmd.Parameters["@Data"].Value = picData02;
            //cmd.Parameters.AddWithValue("@Data", picData02);
            cmd.ExecuteNonQuery();
        }


        //将图片数据转换为二进制流数据
        public byte[] ImageToByte(Image Picture)
        {
            MemoryStream ms = new MemoryStream();
            if (Picture == null)
                return new byte[ms.Length];
            Picture.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            byte[] BPicture = new byte[ms.Length];
            BPicture = ms.GetBuffer();
            return BPicture;
        }

五,给报告绑定sqlite类型的数据源,拖拉字段到对应控件上,即实现需求;

操作依然参考:使用DevExpress的XtraReports控件创建员工薪资报告应用程序
或者英文好的直接参考官方文档:
01.报表绑定数据库
02.将报表控件绑定到数据
03.XRPictureBox

以下是我绑定后的,数据绑定就不再赘述了。
在这里插入图片描述
预览效果(数据库中有多少条数据就能显示多少页报告):
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饿不坏的企鹅

共享单车该续费了555

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值