星空的简易账表有1张自带的单据体,用于展示报表数据,但如果想再增加1个单据体甚至更多单据体展示报表数据,目前系统没法在GetReportTitles(IRptParamsfilter)方法中对其它单据体进行赋值,遇到此类需求一般开发人员会考虑用动态表单实现,但把动态表单的查询条件毕竟与简易账表不同,在报表中放动态表单有格格不入之嫌,在前段的报表开发中,我也遇到了此类问题,通过不断调试,找到了一个可以在简易账表添加其它单据体并写入数据方法。实现方法主要是通过放入多行文本,把其它单据体的展示数据在服务器插件的ReportTitlesGetReportTitles(IRptParamsfilter)方法中,用Json格式保存起来,然后在表单插件的AfterBindData(EventArgse)方法中取出来并解释写到其它单据体中。1、在简易账表中添加1个多行文本,注意设置长度为-1添加1个单据体2、在服务器插件的ReportTitlesGetReportTitles(IRptParamsfilter)中写入JSon格式的值JSONArrayitemArr=newJSONArray();//添加LIVEPROGRAMMETOTAL信息JSONObjectobjLive=newJSONObject();objLive.Put("FEnType",0);objLive.Put("FEnItem","LIVEPROGRAMMETOTAL:");objLive.Put("FEnAmt",Convert.ToDecimal(dr["FLiveProgTotal"]));itemArr.Add(objLive);//添加FILMPROGRAMMETOTAL信息JSONObjectobjFilm=newJSONObject();objLive.Put("FEnType",0);objFilm.Put("FEnItem","FILMPROGRAMMETOTAL:");objFilm.Put("FEnAmt",Convert.ToDecimal(dr["FFilmProgTotal"]));itemArr.Add(objFilm);//从数据库查询json项目值stringmySql=@"selectFPromotionNo,isnull(sum(FTalentCost),0)promotionAmtfrom{0}groupbyFPromotionNo";stringsql=string.Format(mySql,tmpName);using(IDataReaderdr=DBUtils.ExecuteReader(this.Context,sql)){while(dr.Read()){if(!dr["FPromotionNo"].IsNullOrEmpty()&&!dr["promotionAmt"].IsNullOrEmpty()){//添加Promotion汇总数据JSONObjectobj=newJSONObject();obj.Put("FEnType",1);obj.Put("FEnItem",dr["FPromotionNo"].ToString()+":");obj.Put("FEnAmt",Convert.ToDecimal(dr["promotionAmt"]));itemArr.Add(obj);}}}//添加汇总行数据JSONObjectobjTotal=newJSONObject();objTotal.Put("FEnType",2);objTotal.Put("FEnItem","GRANDTOTAL:");objTotal.Put("FEnAmt",grandTotal);itemArr.Add(objTotal);JSONObjectreturnJson=newJSONObject();returnJson.Put("itemArr",itemArr);//设置多行文本的Json信息result.AddTitle("FPromotionJson",returnJson.ToJSONString());3、在表单插件的voidAfterBindData(EventArgse)方法读取多行文本值,解释并写入单据体//删除单据体数据this.View.Model.DeleteEntryData("FPromotionEntity");stringpromotionJsonStr=string.Empty;ReportTitlestitles=(this.View.ModelasISysReportModel).GetReportTitles();foreach(vartitleintitles){if("FPromotionJson".EqualsIgnoreCase(title.TitleKey)){//获取多行文本【FPromotionJson】的数据promotionJsonStr=title.TitleValue;break;}}if(!promotionJsonStr.IsNullOrEmptyOrWhiteSpace()){JSONObjectpromotionJson=JSONObject.Parse(promotionJsonStr);if(!promotionJson.IsNullOrEmptyOrWhiteSpace()){JSONArraydataList=(JSONArray)promotionJson.Get("itemArr");intfcount=0;JSONObjectentryJson=null;for(intj=0;j