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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DevExpress控件提供了一些用于读取和展示Excel数据的工具。以下是一些步骤来使用DevExpress控件实现在数据库读取Excel并在窗体上展示数据: 1. 首先,需要使用DevExpress的SpreadsheetControl控件来加载Excel文件并将其转换为数据表。可以使用以下代码来实现: ``` using DevExpress.XtraSpreadsheet; using DevExpress.XtraSpreadsheet.Services; using System.Data; //加载Excel文件 SpreadsheetControl spreadsheetControl = new SpreadsheetControl(); spreadsheetControl.LoadDocument("your_file_path"); //获取数据表 IWorkbook workbook = spreadsheetControl.Document; IWorksheet worksheet = workbook.Worksheets[0]; DataTable dataTable = worksheet.CreateDataTable(worksheet.GetDataRange()); ``` 2. 接下来,需要将数据数据插入到数据库。可以使用以下代码来实现: ``` using System.Data.SqlClient; //连接数据库 string connectionString = "your_connection_string"; SqlConnection connection = new SqlConnection(connectionString); connection.Open(); //插入数据 foreach (DataRow row in dataTable.Rows) { SqlCommand command = new SqlCommand("INSERT INTO your_table_name (column1, column2, ...) VALUES (@value1, @value2, ...)", connection); command.Parameters.AddWithValue("@value1", row["column1"]); command.Parameters.AddWithValue("@value2", row["column2"]); //... command.ExecuteNonQuery(); } //关闭连接 connection.Close(); ``` 3. 最后,可以使用DevExpress的GridControl控件展示从数据库读取的数据。可以使用以下代码来实现: ``` using DevExpress.XtraGrid.Views.Grid; //连接数据库 string connectionString = "your_connection_string"; SqlConnection connection = new SqlConnection(connectionString); connection.Open(); //查询数据 string query = "SELECT * FROM your_table_name"; SqlDataAdapter adapter = new SqlDataAdapter(query, connection); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); //绑定数据到GridControl控件 gridControl.DataSource = dataTable; gridControl.ForceInitialize(); //设置列的显示格式 GridView gridView = gridControl.MainView as GridView; gridView.Columns["column1"].DisplayFormat.FormatType = DevExpress.Utils.FormatType.Numeric; gridView.Columns["column1"].DisplayFormat.FormatString = "c2"; gridView.Columns["column2"].DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; gridView.Columns["column2"].DisplayFormat.FormatString = "dd/MM/yyyy"; //... //关闭连接 connection.Close(); ``` 以上是使用DevExpress控件实现在数据库读取Excel并展示在窗体上的步骤。需要注意的是,这里只是提供了一种实现方法,具体的实现方式可能会因为项目需求的不同而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

饿不坏的企鹅

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值