Repeater控件动态变更列(Header,Item和Foot)信息实现思路

Repeater控件动态变更列(Header,Item和Foot)信息实现思路

需要开发一个小报表,显示最近五个月的汇总数统计,报表会随着月份的变化而变化。接下来详细介绍一下实现方法,有兴趣的不要错过。

有必要开发一个小报表,显示最近五个月的汇总数统计。报表会随着月份的变化而变化,如下图所示。第一列【部门】是固定的,第二列到第六列,也就是说,2012年11月这一列将在下个月消失,后续的列将向前移动,最后一列2013年3月将变成2013年4月。

在下图中,最下面一行显示了每一列的总数(第一列除外)。

对于这个报告,Insus.NET决定使用中继器控制来实现它。难点在于动态显示第二至第六列的列名和绑定数据。如果最后一行算总数,只要完成上面的动态绑定就不会有问题。Repeater的FooterTemplate显示某一列的合计方法。请参考这篇文章:https://www.jb51.net/article/34972.htm,因为整个报告有一定数量的栏目,总共有六个栏目,所以我们可以把这个写死。

首先,HeaderTemplate嵌入了一个表格,设计了六列,每列拉一个标签,分别设置标签的id。最好使它们看起来有索引序数。接下来,ItemTemplate的设计可以参考HeaderTemplate的设计方法。最后,设计FooterTemplate、标签ID、td文本对齐和背景颜色:

这三个模板的标签有不同的id,但是有一定的规则,便于在后台查找控件和以后重构控件。

上面全是html设计,下面会是程序开发。复制代码如下://实例化对象,声明一个DataTable对象objDt。PrintLog objPrintLog=new PrintLog();DataTable objDt

//声明五个变量,用来存储那五个月小数c1,c2,c3,c4,c5的每一部分的数量;将从数据库获取的数据绑定到Repeater控件:复制代码如下:protected void page _ load(object sender,eventargs e) {if(!IsPostBack){ Data _ Binding();} }

private void Data _ Binding(){((IUserControlContainer)this。主人)。ShowControl=true

culture info oculture info=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这个。repeater lfms . DataBind();}电话响了,你需要先接.大约需要一分三十六秒才能完成。顺便去冲杯咖啡。

下面将是Repeater控件的OnItemDataBound事件,Insus.NET也将分别说明header、Item和Foot:

项目绑定:

最后,是脚的代码:

呵呵,完了。我相信它在运行的时候会随着时间(月份的变化)往前走,它对应的列名和数据也会随之变化。

Repeater控件动态变更列(Header,Item和Foot)信息实现思路