MReport报表支持多种单元格内容显示,支持默认显示,以图片显示,以HTML显示以及以下载链接显示二进制内容四种方式,常用的是默认显示,即单元格中本身是什么内容,就显示什么,详细参照单元格其他属性。
在实际应用中,为了实现一些特殊效果,很多数据库字段里面存的是html,那么在使用MReport的时候,就必然要借助以HTML显示来展示数据库中字段内容,但是,这样就带来一个问题,在进行数据填报的时候,就需要使用HTML标签来保证该特殊样式,这样就会非常麻烦,并且通用性很低,那么问题该怎么解决呢?
示例:某某公司使用集成了MReport,需要使用MReport制作一张报表,该报表为该公司首页的公告栏,每天发布不同的公告,能够实现图片和文字共存,并且由于公告的特殊性,每次显示内容的样式都会根据内容的不同而不同。
- 模板样式
整个报表主体如下图:
B6,G6,单元格的显示方式为以HTML显示,即单击单元格,在右侧下方的单元格属性表中选择其他属性,显示内容选择以HTML显示内容。
A列隐藏。
G6单元格的内容为:
- <textarea id="editor1" name="editor1"><p>请编辑您的内容</p>
G3,I3,K3是三个按钮,设置如下:
给G3添加点击事件,js如下
- text= contentPane.curLGP.getCellValue(1,5);
- CKEDITOR.instances.editor1.setData(text);
- contentPane.curLGP.write.getWidgetByName("up").setEnable(true);
上述代码中,通过getCellValue函数获取B6单元格的值,并将该值赋给html编辑器,内容确认按钮可用。
注:如果获取的单元格的值是一个扩展的单元格,则可用row和col来定位单元格,并将这两个值随意放置在某个单元格中,用这两个单元格做中介,传递行和列。
例子:(BC管理)
var flag=this.getValue(); //获取当前复选框控件的状态,true /false
for(var i=0;i<window.lineboxes.length;i++){ //循环遍历每个复选控件
var cr=MR.cellStr2ColumnRow(window.lineboxes[i].options.location);
//由每个控件位置获取行号列号
if(cr.col<44){
_g().setCellValue(cr.col, row, flag)};
var val="0";
if(cr.col>col+5&&cr.col<44)
{
if(flag)
val="1";
_g().setCellValue(cr.col+1, row, val);
}
//逐一赋值当前状态
}
给I3添加点击事件,js如下:
- var text=CKEDITOR.instances.editor1.getData();
- contentPane.curLGP.setCellValue(1,5,text);
- contentPane.curLGP.fireCellValueChange
- (contentPane.curLGP.getTDCell(1,5), text);
- this.setEnable(false);
这段代码的意思是获取html编辑器中已经重新编辑了的数据,并将该数据传回B6单元格。
给K3添加点击事件,js如下:
- CKEDITOR.instances.editor1.setData("请输入您的内容");
选择模板>模板填报属性设置,添加内置sql,如下图:
- 添加加载结束事件
在模板>模板web属性>填报页面设置中选择为该模板单独设置,并添加加载结束事件,js如下:
- CKEDITOR.replace( 'editor1' );
注:此处的editor1需跟上面html编辑器单元格中的名字对应。