当前位置: 移动技术网 > IT编程>开发语言>.net > Repeater控件动态变更列(Header,Item和Foot)信息(重构cs)

Repeater控件动态变更列(Header,Item和Foot)信息(重构cs)

2017年12月12日  | 移动技术网IT编程  | 我要评论
早上有分享《repeater控件动态变更列(header,item和foot)信息》 ,是动态变更一些列的内容。 虽然它算不上是完全动态化,但它已经达到初期想要的效果。如

早上有分享《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();
}
}
}
}

重构是在程序功能要求不变的情况之下,减少冗余的代码。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网