一.需求描述
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;
以下是我绑定后的,数据绑定就不再赘述了。
预览效果(数据库中有多少条数据就能显示多少页报告):