Repeater控件动态变更列(Header,Item和Foot)信息(重构
上一篇文章虽然动态效果尚未达到极致,但已经初步实现了预期目标。现在,我们将对cs的代码进行重构。原因在于前篇的代码虽然简洁,但冗余的代码较多。有兴趣的朋友们,可以将其作为参考。
原本的代码中有五个变量用于存储五个月份每个部分的数据量,但在重构过程中,我们发现这五个变量已经不再必要。原代码示例如下:
```csharp
// 宣告五个变量用于存储每个月份的数据量
decimal c1, c2, c3, c4, c5;
```
重构时,我们将使用常量替代这些固定的数字,提高代码的可读性和可维护性。具体的重构代码如下:
```csharp
// 定义一个常量用于表示动态列的数量
const int dynamicColumns = 5;
// 将原本硬编码的月份数量替换为常量值
objPrintLog.Months = dynamicColumns; // 之前代码是 objPrintLog.Months = 5;
```
接下来,我们将重构Repwater控件的Header部分代码。为了便于对比,我们将前一篇文章中的相关图片引用在这里。以下是重构后的代码示例:
```csharp
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) {
```csharp
if (e.Item.ItemType == ListItemType.Footer)
{
// 寻找对应的控件
var controls = e.Item.FindControls("LabelF0", "LabelF1", "LabelF2", "LabelF3", "LabelF4", "LabelF5");
if (controls != null && controls.Length == dynamicColumns + 1)
{
for (int k = 0; k <= dynamicColumns; k++)
{
Label lf = (Label)controls[k];
if (k == 0)
{
lf.Text = "Total";
}
else
{
decimal? value = ViewState["c" + k.ToString()] as decimal?;
lf.Text = value.HasValue ? value.Value.ToString() : "0";
}
}
}
}
```
在这个版本中,我们简化了代码结构,通过一次性查找所有需要的控件,避免了多次调用`FindControl`方法。我们对ViewState中的值进行了可空性判断,防止在未赋值的情况下出现错误。我们直接在控件数组中进行循环,避免了重复的代码块。整体而言,这个版本更加简洁、清晰,易于理解。我们也保留了原始代码的逻辑和功能。这完全符合重构的标准——在保持功能不变的前提下,提高代码的质量和效率。至于你提到的 `cambrian.render('body')`,由于上下文不明确,我无法给出具体的重构建议。
编程语言
- Repeater控件动态变更列(Header,Item和Foot)信息(重构
- ASP.NET系统关键字及保留字列表整理
- js精确的加减乘除实例
- ios原生和react-native各种交互的示例代码
- 在win10系统下安装Mysql 5.7.17图文教程
- PR值查询代码制作
- React路由管理之React Router总结
- 纯JS实现只能输入数字的简单代码
- Jmail发邮件的例子
- 微信小程序 监听手势滑动切换页面实例详解
- 详解ASP.NET MVC3-Razor的@-和语法
- PHP冒泡算法详解(递归实现)
- ES6中数组array新增方法实例总结
- ecshop实现smtp发送邮件
- JavaScript中的Reflect对象详解(ES6新特性)
- 2019最新的Pycharm激活码(推荐)