我自己为repeater写了一个emptytemplate使用时发现,如果repeater的headertemplate或者footertemplate里有内容,我的这个template不会呈现在
header和footer的中间,而是会在footer的后面,我很郁闷,怎么办?比如
<headerT...>
 <table>
</headrT...><myTemplate>
 fdksjfkd
</myTempalte><footer...>
 </table>
</footer...>此时<table></table>fdksjfkd如何能<table>fdksjfkd</table>

解决方案 »

  1.   

    怎么讲,我的实现很简单/// <summary>
        /// 扩展了个EmptyDataTemplate,没有数据时显示
        /// </summary>
        public class Repeater : System.Web.UI.WebControls.Repeater
        {
            /// <summary>
            /// 空数据模板
            /// </summary>
            [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(TemplateControl))]
            public ITemplate EmptyTemplate
            {
                get;
                set;
            }        protected override void OnDataBinding(System.EventArgs e)
            {
                base.OnDataBinding(e);            if (null != this.EmptyTemplate)
                {
                    if (this.Items.Count < 1)
                    {
                        this.EmptyTemplate.InstantiateIn(this);
                    }
                }
            }
        }
      

  2.   

    那我是不是要控制render???不要吧
      

  3.   


    protected override void OnDataBinding(System.EventArgs e)
            {
                base.OnDataBinding(e);            if (null != this.EmptyTemplate)
                {
                    if (this.Items.Count < 1)
                    {
                        this.EmptyTemplate.InstantiateIn(this);
                    }
                }
            }
    看这里 你应该能明白了吧
      

  4.   

    table放在 repeater的外面。 head中放  tr      itempalate中tr里在放table        foot中放 tr
      

  5.   


    有点不明白,instantiateIn是用来动态生成了一个模板,但是最终的render来控制怎么显示header,footer等的吧,那告诉我有解决方案吗?有的话,如何做,谢谢
      

  6.   

    之前猜测 是因为模板加载顺序的原因 导致现在这个情况,
    你的代码应该是证实了我的猜测, 因为你重写方法时 先执行了 base.OnDataBinding(e);这样会把全部模板加载
    之后,才加载你定义的空模板
      

  7.   

     protected override void OnItemCreated(RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Footer)
                {                if (null != this.MyEmptyTemplate)
                    {
                        if (this.Items.Count == 0)
                        {
                            this.MyEmptyTemplate.InstantiateIn(this);
                        }
                    }
                }
                base.OnItemCreated(e);
            }