要求开发一个小报表,显示最近五个月汇总的数量统计。报表会随着月份的变化而变化,如下图所示。第一列【部门】是固定的,第二列到第六列,也就是说2012年11月这一列下个月消失,后面的几列往前走,最后一列2013年3月变成2013年4月。下图中,底线显示了每一列的总数(第一列除外)。
对于这个报告,Insus.NET决定使用中继器控制。难点在于动态显示第二列到第六列的列名并绑定数据。最后一行算总数不是问题,只要完成以上动态绑定。中继器的FooterTemplate显示了某一列的总计方法。请参考这篇文章://www . JB 51 . net/article/34972 . htm,因为整个报表有一定的列数,总共有6列,所以我们可以把这个写下来。首先,HeaderTemplate嵌入了一个表。设计了六列,每列拉一个标签,分别设置标签的标识。最好让它们看起来像索引为: 的序数。
接下来是ItemTemplate的设计。可以参考HeaderTemplate的设计方法:。
最后设计了FooterTemplate,设计了Label的ID、td文本对齐方式和背景色:。
三个模板的标签ID不一样,但是有一些规则,方便后台FindControl和以后重构控件。以上都是html设计,下面将是程序开发。复制代码如下://实例化对象并声明一个DataTable对象objDt。PrintLog objPrintLog=new PrintLog();DataTable objDt//声明五个变量,将用于存储这五个月内各部分的编号,即小数c1、c2、c3、c4、c5、C5;将从数据库获得的数据绑定到Repeater控件:复制代码如下: protected void page _ load(对象发送方,eventargs e) {if(!IsPostBack){ Data _ Binding();} } private void Data _ Binding(){((IUserControlContainer)this。大师)。ShowControl=trueculture info oCultureInfo=new culture info(' en ');//设置区域区域性datetime current datetime=datetime . now;//获取当前日期和时间objprintlog . year=current datetime . year;//获取年赋值objprintlog . month=current datetime . month;//获取月分配objPrintLog。月=5;//最近连续5个月objdt=objprintlog . getsummaryreportbyyearmonth();这个。RepeaterLFMS . DataSource=objDt这个。RepeaterLFMS . DataBind();}电话响了,你需要先接电话.大约一分三十六秒后,顺便泡一杯咖啡。接下来,将是Repeater控件的OnItemDataBound事件,Insus.NET还分别说明了header、Item和Foot的代码:。
项目绑定:
最后是Foot的代码:。
呵呵,搞定了。我相信它在运行的时候,会随着时间(月的变化)而变化,它对应的列名和数据也会发生变化。