项目场景:
客户配置了彩色打印机,要求打印护士排班表时,支持班次颜色这个字段的彩打
问题描述:
颜色不是固定的,是程序里面动态配置的
解决方案:
处理打印数据源的时候,需要将颜色值作为变量,动态的转为具体的颜色,传到FastReport报表的DataTable数据源中。在单元格的AfterData事件中计算。
第一种实现方式:设置HtmlTags = true;
private void Cell36_AfterData(object sender, EventArgs e)
{
TableCell cell = sender as TableCell;
cell.HtmlTags = true;
//htmlColor实例:#FFFFA500
string htmlColor = ((String)Report.GetColumnValue("排班信息.周二班次颜色"));
cell.Text = "<font color="+htmlColor+">"+cell.Text+"</font>";
}
本来为到这里问题就解决了,没想到这样会导致单元格的属性失效,例如:对齐方式、自动换行等。看样子这种方式不能解决该问题,接下来尝试第二种方式。
第二种方式:设置单元格的TextColor。在以往大部分情况下,颜色是固定的时候,我们可以直接赋值,如:Cell1095.TextColor = Color.Red ;
现在我们的颜色都是以变量的方式存在DataTable数据源中的,类似于#FFFFA500,所以我们要将字符串转为System.Drawing.Color类型。
private void Cell35_AfterData(object sender, EventArgs e)
{
TableCell cell = sender as TableCell;
string htmlColor = ((String)Report.GetColumnValue("排班信息.周一班次颜色")); //#FFFFA500
cell.TextColor = System.Drawing.ColorTranslator.FromHtml(htmlColor); //将html色号转为Color对象
}
打印预览,功能实现,也不存在丢失单元格其他属性的问题,问题解决。
总结:FastReport中HtmlTags这个属性尽量不用吧,直接用TextColor,虽然踩了一次坑,但是最后问题解决,还是很完美!!!