zoukankan      html  css  js  c++  java
  • 重写Repeater,使其支持空模版(列表为空时显示) 。改进

    最近项目需要,在网上搜索Repeater为空时提示解决方法。有两种方法,一种是在FooterTemplate模板中放一个隐藏控件,用Repeater.Items.Count ==0 判断是否显示。比如这篇文章就是用的这种方法。
    第二种方法相对复杂一点,用的是重写Repeater。具体方法见这篇文章
     
    不过这两篇文章的方法都有点小问题,显示在FooterTemplate模板中间或之后,有什么缺点这就不说了,这里说下解决方法。
    直接上代码:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Web.UI;
    namespace MyRepeater
    {
        public class Repeater : System.Web.UI.WebControls.Repeater
        {
            [PersistenceMode(PersistenceMode.InnerProperty), Browsable(false), TemplateContainer(typeof(TemplateControl))]
            public ITemplate EmptyDataTemplate{get;set;}
            protected override void OnDataBinding(EventArgs e)
            {
                base.OnDataBinding(e);

                if (EmptyDataTemplate != null)
                {
                    if (this.Items.Count == 0)
                    {
                        EmptyDataTemplate.InstantiateIn(this);
                    }
                }
            }
            protected override void RenderChildren(HtmlTextWriter output)
            {
                if (HasControls())
                {
                    for (int i = 0; i < Controls.Count; i++)
                    {
                        if (this.FooterTemplate != null && this.Items.Count == 0 && EmptyDataTemplate != null)
                        {
                            if (i == Controls.Count - 2)
                            {
                                Controls[i + 1].RenderControl(output);
                                continue;
                            }
                            if (i == Controls.Count - 1)
                            {
                                Controls[i - 1].RenderControl(output);
                                continue;
                            }
                        }
                        Controls[i].RenderControl(output);
                    }
                }
            }
            protected override void Render(HtmlTextWriter output)
            {
                RenderChildren(output);
            }
        }
    }


    效果测试

    前台代码

    后台代码

    显示效果

    生成代码

    源码地址,包括测试代码

    http://my-repeater.googlecode.com/svn



  • 相关阅读:
    acdream.18.KIDx's Triangle(数学推导)
    upc.2219: A^X mod P(打表 && 超越快速幂(in some ways))
    山东省第四届acm.Rescue The Princess(数学推导)
    BC.5200.Trees(dp)
    BC.36.Gunner(hash)
    hdu.5195.DZY Loves Topological Sorting(topo排序 && 贪心)
    数组倒置算法扩展
    C# 传值和传引用 ( ref out in )
    C# 输出文件夹下的所有文件
    控制反转(自译)
  • 原文地址:https://www.cnblogs.com/weapon/p/2782468.html
Copyright © 2011-2022 走看看