本帖最后由 飞雪连天射 于 2023-10-26 16:16 编辑
看了这个,但是和我所需要的多数据源不是一个意思,我所说的是一个报表上有表头信息和内容信息,表头部份是一个DataTable提供数据,Detail内容部份又是一个DataTable提供数据,分别绑定显示,我在附件给了一个我需要的示例的报表和样例数据,麻烦你帮我写一段代码实现一下,并且这个示例中我还需要知道怎么把base64转为byte[]绑定显示为图片,表头有图片,Detail中每个数据也有图片,也请一并给一个绑定显示图片的示例 ,我在前端获得的数据是base64格式的,之前你说需要转为byte[],一直没想好怎样转,又怎样实现和报表的绑定。
我的测试中表头和尾信息采用的是用代码赋值:
public class ReportHelper
{
public C1.Win.FlexReport.C1FlexReport BuildReport()
{
DataSet ds = new DataSet();
ds.ReadXml(System.IO.Directory.GetCurrentDirectory() + @"\data.xml"); //加载数据源,DataSet中包含两个DataTable,分别为报表的表头信息与Detail信息
C1.Win.FlexReport.C1FlexReport c1FlexReport = new C1.Win.FlexReport.C1FlexReport();
c1FlexReport.Load(System.IO.Directory.GetCurrentDirectory() + @"\客户订单主从带图示例报表.flxr", "主从带图报表样例");
//报表主信息未实现自动绑定显示,采用代码赋值
ImageField fld照片 = (ImageField)c1FlexReport.Fields["fld照片"];
fld照片.Picture = Base64ToImage(ds.Tables[0].Rows[0]["照片"].ToString());
TextField fld序号 = (TextField)c1FlexReport.Fields["fld序号"];
fld序号.Text = "ZXW000000000001";
TextField fld姓名 = (TextField)c1FlexReport.Fields["fld姓名"];
fld姓名.Text = "张晓伟大";
TextField fld合计 = (TextField)c1FlexReport.Fields["fld合计"];
fld合计.Text = "220.00.000";
TextField fld打印员 = (TextField)c1FlexReport.Fields["fld打印员"];
fld打印员.Text = "这是打印员1";
TextField fld打印时间 = (TextField)c1FlexReport.Fields["fld打印时间"];
fld打印时间.Text = "2023-10-10 10:10:23";
//子表自动绑定显示
c1FlexReport.DataSource.Recordset = ds.Tables[1];
c1FlexReport.Render();
return c1FlexReport;
}
/// <summary>
/// base64 转 Image,将base64格式的图片字符转为图片
/// </summary>
/// <param name="base64"></param>
public static Image Base64ToImage(string base64)
{
base64 = base64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");//将base64头部信息替换
byte[] bytes = Convert.FromBase64String(base64);
MemoryStream memStream = new MemoryStream(bytes);
Image mImage = Image.FromStream(memStream);
return mImage;
}
}
|