LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

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

admin
2017年11月16日 23:53 本文热度 6587

早上有分享《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个变量。

复制代码
 1  if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
 2         {
 3             DataRowView drv = (DataRowView)e.Item.DataItem;
 4             if (e.Item.FindControl("LabelI0") != null
 5                 && e.Item.FindControl("LabelI1") != null
 6                 && e.Item.FindControl("LabelI2") != null
 7                 && e.Item.FindControl("LabelI3") != null
 8                 && e.Item.FindControl("LabelI4") != null
 9                 && e.Item.FindControl("LabelI5") != null)
10             {
11 
12                 for (int j = 0; j <= dynamicColumns; j++)
13                 {
14                     Label li = (Label)e.Item.FindControl("LabelI" + j.ToString());
15 
16                     if (j == 0) 
17                         li.Text = drv[objDt.Columns[0].ColumnName].ToString();
18                     else
19                     {
20                         decimal v = string.IsNullOrEmpty(drv[objDt.Columns[j].ColumnName].ToString()) ? 0 : Convert.ToDecimal(drv[objDt.Columns[j].ColumnName].ToString());
21                         li.Text = v.ToString();
22 
23                         ViewState["c" + j.ToString()] = ViewState["c" + j.ToString()] == null ? 0 : Convert.ToDecimal(ViewState["c" + j.ToString()]) + v;
24                     }
25                 }
26             }
27         }
复制代码


最后是Foot的重构:

Foot重构好的代码,第14行是判断是否为第一列,第17行,是把ViewState的值赋给Label。

复制代码
 1  if (e.Item.ItemType == ListItemType.Footer)
 2         {
 3             if (e.Item.FindControl("LabelF0") != null
 4                 && e.Item.FindControl("LabelF1") != null
 5                 && e.Item.FindControl("LabelF2") != null
 6                 && e.Item.FindControl("LabelF3") != null
 7                 && e.Item.FindControl("LabelF4") != null
 8                 && e.Item.FindControl("LabelF5") != null)
 9             {
10                 for (int k = 0; k <= dynamicColumns; k++)
11                 {
12                     Label lf = (Label)e.Item.FindControl("LabelF" + k.ToString());
13 
14                     if (k == 0)
15                         lf.Text = "Total";
16                     else
17                         lf.Text = ViewState["c" + k.ToString()] == null ? "0" : ViewState["c" + k.ToString()].ToString();
18                 }
19             }
20         }
21     }
复制代码


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


该文章在 2017/11/16 23:53:29 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved