上篇博客,主要简单说了cell报表模板的设计,这次主要来说一下如何给模板上各个单元格赋值,这里主要是分两部分,一部分的值,我们只需要从数据库中取出来显示就OK的;还有一部分呢,需要计算某几行几列值等等的。
首先和大家说明几点小细节:
表头:就是最上边一行大标题及最后一行中的单位领导,制表人,日期等等信息
表体:就是具体的数据信息,对于数据的合计等等也包含在表体中;当然如果你设计的报表内容比较多,可以将一部分只是用来显示的数据放在表头中,这个可根据实际情况来做决定。
表头和表体没有具体的区分界限,有需要也可以将表体中的部分作为表头数据绑定.
1.先来看看如何绑定数据?
用华表模板设计器打开模板,选中单元格,选择【数据】→【名称定义】,进入到如下界面,根据你sql中设定的字段名来绑定(不区分大小写),这里需要说明的一点就是[0]代表表头,[1]代表表体。选择单元格位置,【确定】.就OK了。
2.合计列绑定
合计,大家都懂的,计算某行或某列的和,那来看看如何绑定合计让它正确计算呢?这和Excel中的是一样的,给那个单元格绑定计算公式就OK..
Sum(Range(4,GetRow(CurCell()),8,GetRow(CurCell()),1))
提醒:重要事情要记得,关于一些函数的使用,看帮助文档!看帮助文档!看帮助文档!
3.列小计单元格绑定
这部分都是在sql中直接用sum函数计算,再直接绑定别名.
代码:
sum(dt.n_value_5) n_value_5,
sum(dt.n_value_0) n_value_0,
sum(dt.n_value_n10) n_value_n10,
sum(dt.n_value_n20) n_value_n20,
sum(dt.n_value_n35) n_value_n35,
4.上锁
当数据绑定完成之后,我们将模板上锁,这样在系统中使用时,报表是只读的,不可修改.如下图,选中要锁的单元格,选择工具栏中的图标,即可.
5.效果图:
说明:图中两行小计是在sql中拼出来的,将整个查询的数据和计算的小计当成一个整体放到模板中间的空行中.cell模板展示完了,来看看后台的SQl是怎么写的?
D层代码:
#region 年度需求计划汇总(精简)--贺彩妍
public DataTable GetSimpleYearTitle(string id)
{
string strSql = @" select distinct ( mt.s_unit_name|| mt.s_year || '年柴油需求计划') reptitle,
('填报单位:' || mt.s_write_unit_name) s_write_unit_name, ('计量单位:' || mt.S_METRIC_UNIT) S_METRIC_UNIT,
('单位领导:' || mt.s_principal_name) s_principal_name, ('制表:' || mt.s_write_user_name) s_write_user_name,
mt.s_write_date s_write_date
from rmrpt_plan_rpt_mt mt
where mt.n_prm_id='" + id + "'";
SQLParameter sqlParams = new SQLParameter(0);
Pager pager = new Pager();
pager.IsPaginate = false;
pager = DataAccess.GetDataTableBySQL(strSql, sqlParams, null, pager);
return (DataTable)pager.Data;
}
public DataTable GetSimpleYearPlan(string id)
{
string sbSQL = @" select rownum, t.*
from (select td.*
from (select dt.s_recieve_unit_name,
dt.s_refine_factory_name,
dt.N_VALUE_5,
dt.n_value_0,
dt.N_VALUE_N10,
dt.N_VALUE_N20,
dt.N_VALUE_N35,
nvl(dt.N_VALUE_5, 0) + nvl(dt.N_VALUE_0, 0) +
nvl(dt.N_VALUE_N10, 0) + nvl(dt.N_VALUE_N20, 0) +
nvl(dt.N_VALUE_N35, 0) xiaoji
from rmrpt_plan_rpt_oil_ydt dt
where dt.n_prm_id = '"+id+@"'
union all
select dt.s_recieve_unit_name,
'小计' s_refine_factory_name,
sum(dt.n_value_5) n_value_5,
sum(dt.n_value_0) n_value_0,
sum(dt.n_value_n10) n_value_n10,
sum(dt.n_value_n20) n_value_n20,
sum(dt.n_value_n35) n_value_n35,
nvl(n_value_5, 0) + nvl(n_value_0, 0) +
nvl(n_value_n10, 0) + nvl(n_value_n20, 0) +
nvl(n_value_n35, 0) xiaoji
from rmrpt_plan_rpt_oil_ydt dt
where dt.n_prm_id = '"+id+@"'
group by s_recieve_unit_name,
dt.N_VALUE_5,
dt.N_VALUE_0,
dt.N_VALUE_N10,
dt.N_VALUE_N20,
dt.N_VALUE_N35) td
order by s_recieve_unit_name,
s_refine_factory_name,
n_value_5,
n_value_0,
n_value_n10,
n_value_n20,
n_value_n35 desc) t ";
SQLParameter sqlParams = new SQLParameter(0);
Pager pager = new Pager();
pager.IsPaginate = false;
pager = DataAccess.GetDataTableBySQL(sbSQL, sqlParams, null, pager);
return (DataTable)pager.Data;
}
#endregion
总结:这次主要讲解了,如何给Cell模板中的单元格赋值,以及合并列、小计列的绑定.下篇博客小编会总结一下Cell模板和程序的结合,敬请期待~~