FlexReport几个问题(相同行保持一样行高,base64图片处理)
本帖最后由 飞雪连天射 于 2023-10-17 17:32 编辑最近在用FlexReport做报表,遇到如下问题:
1、相同行多个Field保持高度一致问题
2、分组数据中包含base64图片显示问题
附件文件中数据源已含样例数据
本帖最后由 Richard.Ma 于 2023-10-23 09:55 编辑
问题1,设置anchor即可,这样这个格子会自动根据撑开的高度,上下都扩展
问题2,不支持直接加载base64数据,所有你需要做的是先进行转换,把base64数据转换为图片流
本帖最后由 飞雪连天射 于 2023-10-21 12:04 编辑
Richard.Ma 发表于 2023-10-17 18:33
收到,明天验证后给你回复
还没有验证吗?
另外还有新的问题,这个报表分为表头信息和内容信息,我分别为表头和内容设置了数据源,发现通过选择数据源,要么显示表头的数据,要么显示内容数据,只能选择一个,请确认一个报表是否只能有一个数据源?不能两个数据源一起命名用?报表见附件:
多数据源绑定,可以参控这块
https://www.grapecity.com/componentone/docs/win/online-flexreport/DataSourcesinFlexReport.html Richard.Ma 发表于 2023-10-17 18:33
问题1,设置anchor即可,这样这个格子会自动根据撑开的高度,上下都扩展
你这里所讲的转换为图片流是指提前将base64转为byte? 是的,转换为byte[] 本帖最后由 飞雪连天射 于 2023-10-26 16:16 编辑
Richard.Ma 发表于 2023-10-23 11:20
多数据源绑定,可以参控这块
https://www.grapecity.com/componentone/docs/win/online-flexreport/DataSo ...
看了这个,但是和我所需要的多数据源不是一个意思,我所说的是一个报表上有表头信息和内容信息,表头部份是一个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.Rows["照片"].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;
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;
}
}
了解你的需求了,目前FELXREPORT不支持这种多数据源的绑定。这块建议您可以考虑使用我们的专业报表控件activeReport。
这个base64问题,我看你是转成image了,具体怎么绑定我调研一下,然你给你demo。帖子先保留处理
页:
[1]