ASP.NET ListView - 如何以编程方式设置EmptyDataTemplate?

时间:2012-03-01 11:24:45

标签: asp.net listview

我有一个MyListView类,它继承自ASP.NET ListView。我想实现一个默认行为 - 如果程序员没有在aspx代码中指定EmptyDataTemplate,MyListView将使用预定义的默认模板(类MyEmptyDataTemplate)。

我试过的是:

public class MyListView : ListView
{
    protected override void CreateChildControls()
    {
        if (EmptyDataTemplate == null)
            EmptyItemTemplate = new MyEmptyDataTemplate();

        base.CreateChildControls();                         
    }
}

MyEmptyDataTemplate实现ITemplate接口。问题是,永远不会调用MyEmptyDataTemplate的InstantiateIn()方法,并且在数据源中没有记录的情况下,我的默认模板永远不会出现。显然我错了理解ListView组件的生命周期和模板应该设置在其他地方。

1 个答案:

答案 0 :(得分:2)

尝试在Init事件中执行此操作:

public class MyListView : ListView
{
    public MyListView()
    {
       this.Init += (o, e) =>
            { 
                if (EmptyDataTemplate == null)
                     EmptyDataTemplate = new MyEmptyDataTemplate();
            };
    }
}

修改 再次检查后,我意识到EmptyDataTemplate已检查是否为emtpy,但已分配的模板为EmptyItemTemplate。但是这两种方法都可以很好地实例化模板。