Repeater控件动态变更列的示例分析-创新互联

这篇文章将为大家详细讲解有关Repeater控件动态变更列的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联公司专注于新田企业网站建设,成都响应式网站建设,商城网站定制开发。新田网站建设公司,为新田等地区提供建站服务。全流程按需网站制作,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务


重构开始:
首先把这五个变量删除,因为在重构过程中,已经不需要这五个变量了。


复制代码 代码如下:


//宣告5个变量,将用来存储那5个月份每个部分的数量
decimal c1, c2, c3, c4, c5;



接下来需要改动的是宣告一个常量,很多地方使用到它:


复制代码 代码如下:


const int dynamicColumns = 5;



把程序中的下面这句


复制代码 代码如下:


objPrintLog.Months = 5; //最近连续5个月份



改为:


复制代码 代码如下:


objPrintLog.Months = dynamicColumns;



也就是说,使用常量的变量去替代旧代码的"5"。

接下来,我们重构Repwater控件的Header的代码,为了好对比,Insus.NET把上一篇对应的图片引用在这里:
Repeater控件动态变更列的示例分析

 Repeater控件动态变更列的示例分析

重构如下:


复制代码 代码如下:


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 部分:
Repeater控件动态变更列的示例分析

旧代码重构之后的代码,第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的重构:
Repeater控件动态变更列的示例分析

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控件动态变更列的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


分享名称:Repeater控件动态变更列的示例分析-创新互联
文章源于:http://myzitong.com/article/jshdg.html