Repeater控件动态变更列(Header,Item和Foot)信息(重构cs)
早上有分享《Repeater控件动态变更列(Header,Item和Foot)信息》 ,是动态变更一些列的内容。
虽然它算不上是完全动态化,但它已经达到初期想要的效果。如果你稍有仔细,也能轻易把它弄出来。现另开一篇,Insus.NET不是重新另外写,而是想重构cs的代码,因为前一篇的代码虽然简单,但代码冗余过多。
重构开始:
首先把这五个变量删除,因为在重构过程中,已经不需要这五个变量了。
//宣告5个变量,将用来存储那5个月份每个部分的数量
decimal c1, c2, c3, c4, c5;
接下来需要改动的是宣告一个常量,很多地方使用到它:
const int dynamicColumns = 5;
把程序中的下面这句
objPrintLog.Months = 5; //最近连续5个月份
改为:
objPrintLog.Months = dynamicColumns;
也就是说,使用常量的变量去替代旧代码的"5"。
接下来,我们重构Repwater控件的Header的代码,为了好对比,Insus.NET把上一篇对应的图片引用在这里:
重构如下:
protected void RepeaterLFMS_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Header)
{
if (e.Item.FindControl("LabelH0") != null
&& e.Item.FindControl("LabelH1") != null
&& e.Item.FindControl("LabelH2") != null
&& e.Item.FindControl("LabelH3") != null
&& e.Item.FindControl("LabelH4") != null
&& e.Item.FindControl("LabelH5") != null)
{
for (int i = 0; i <= dynamicColumns; i++)
{
Label lh = (Label)e.Item.FindControl("LabelH" + i.ToString());
lh.Text = objDt.Columns[i].ColumnName;
}
}
}
只要一对比,就可以明了看到变代码中的代码。下面是Repwater控件Item 部分:
旧代码重构之后的代码,第16行代码,是判断第一列,因为它是字符串,因此单独排除。第23行,使用ViewState来替代旧程序的5个变量。
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
if (e.Item.FindControl("LabelI0") != null
&& e.Item.FindControl("LabelI1") != null
&& e.Item.FindControl("LabelI2") != null
&& e.Item.FindControl("LabelI3") != null
&& e.Item.FindControl("LabelI4") != null
&& e.Item.FindControl("LabelI5") != null)
{
for (int j = 0; j <= dynamicColumns; j++)
{
Label li = (Label)e.Item.FindControl("LabelI" + j.ToString());
if (j == 0)
li.Text = drv[objDt.Columns[0].ColumnName].ToString();
else
{
decimal v = string.IsNullOrEmpty(drv[objDt.Columns[j].ColumnName].ToString()) ? 0 : Convert.ToDecimal(drv[objDt.Columns[j].ColumnName].ToString());
li.Text = v.ToString();
ViewState["c" + j.ToString()] = ViewState["c" + j.ToString()] == null ? 0 : Convert.ToDecimal(ViewState["c" + j.ToString()]) + v;
}
}
}
}
最后是Foot的重构:
Foot重构好的代码,第14行是判断是否为第一列,第17行,是把ViewState的值赋给Label。
if (e.Item.ItemType == ListItemType.Footer)
{
if (e.Item.FindControl("LabelF0") != null
&& e.Item.FindControl("LabelF1") != null
&& e.Item.FindControl("LabelF2") != null
&& e.Item.FindControl("LabelF3") != null
&& e.Item.FindControl("LabelF4") != null
&& e.Item.FindControl("LabelF5") != null)
{
for (int k = 0; k <= dynamicColumns; k++)
{
Label lf = (Label)e.Item.FindControl("LabelF" + k.ToString());
if (k == 0)
lf.Text = "Total";
else
lf.Text = ViewState["c" + k.ToString()] == null ? "0" : ViewState["c" + k.ToString()].ToString();
}
}
}
}
重构是在程序功能要求不变的情况之下,减少冗余的代码。
相关文章
Repeater事件OnItemCommand取得行内控件的方法
这篇文章主要介绍了Repeater事件OnItemCommand取得行内控件的方法,有需要的朋友可以参考一下...2021-09-22- 这篇文章主要介绍了angularjs循环对象属性实现动态列的思路详解,本文给大家分享一个demo代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-11-02
在ASP.NET 2.0中操作数据之二十九:用DataList和Repeater来显示数据
本文主要讲解ASP.NET 2.0中如何使用DataList 和 Repeater 来呈现数据,DataList包含一个table标记,而Repeater不会添加任何额外的代码,个人在实际开发中更推荐使用Repeater。...2021-09-22- 本篇文章小编为大家介绍,ASP.NET笔记之 Repeater的使用。需要的朋友参考下...2021-09-22
asp.net实现DataList与Repeater嵌套绑定的方法
这篇文章主要介绍了asp.net实现DataList与Repeater嵌套绑定的方法,结合实例形式分析了DataList与Repeater的步骤与相关实现技巧,需要的朋友可以参考下...2021-09-22- 最近不止一个同学,问我在Repeater里怎么格式化数据,怎么处理。因为Repeater 属于服务器端控件。要么利用本身的控件事件来处理,要么在数据源上处理。...2021-09-22
ASP.NET中GridView和Repeater重复数据如何合并
这篇文章主要介绍了ASP.NET中GridView和Repeater重复数据合并的方法,感兴趣的小伙伴们可以参考一下...2021-09-22- 这篇文章主要介绍了Repeater中添加按钮实现点击按钮获取某一行数据的方法,是非常实用的一个技巧,需要的朋友可以参考下...2020-06-25
在ASP.NET 2.0中操作数据之三十三:基于DataList和Repeater使用DropDownList过滤的主/从报表
前面已经介绍过使用DropDownList过滤的主/从报表,不过当时是基于GridView,本文算是复习一下,基于DataList和Repeater再次实现一下相同的功能。...2021-09-22- 下面小编就为大家带来一篇重构-C++实现矩阵的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
详解ASP.NET-----Repeater数据控件的用法总结
本篇文章主要介绍了ASP.NET--Repeater数据控件的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。...2021-09-22- Repeater控件是一个数据绑定容器控件,它能够生成各个项的列表,并可以使用模板定义网页上各个项的布局。本文对此进行详细介绍,下面跟着小编一起来看下吧...2021-09-22
- 本文为大家介绍下Repeater如何实现多行间隔显示分隔符,下面有个不错的示例,感兴趣的朋友可以参考下...2021-09-22
- 这篇文章主要介绍了ASP.NET数据绑定中的Repeater控件,Repeater控件可以将数据库中的信息加以绑定然后再在浏览器中显示出来,感兴趣的小伙伴们可以参考一下...2021-09-22
repeater、gridview 在绑定时判断判断显示不同的行样式或文本
repeater、gridview 在绑定时判断判断显示不同的行样式或文本的实现代码,需要的朋友可以参考下。...2021-09-22- repeater 分列显示以及布局的实例代码,需要的朋友可以参考一下...2021-09-22
- Repeater控件想必熟悉.net web开发的人员是很了解不过的了,接下来将与大家共同学习下它的全选删除和分页,感兴趣的你可不要错过了哈,希望可以帮助到你...2021-09-22
在ASP.NET 2.0中操作数据之三十五:使用Repeater和DataList单页面实现主/从报表
前面已经介绍了ASP.NET 2.0中如何使用两个页面实现主/从报表,本文主要讲解,如何使用一个单独页面实现主/从报表。...2021-09-22asp.net Repeater分页实例(PageDataSource的使用)
Asp.net提供了三个功能强大的列表控件:DataGrid、DataList和Repeater控件,但其中只有DataGrid控件提供分页功能。相对DataGrid,DataList和Repeater控件具有更高的样式自定义性,所以很多时候我们喜欢使用DataList或Repeater控件来显示数据...2021-09-22JQuery实现Repeater无刷新批量删除(附后台asp.net源码)
JQuery实现Repeater无刷新批量删除(附后台asp.net源码) ,学习jquery的朋友可以参考下。...2021-09-22