我有一个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组件的生命周期和模板应该设置在其他地方。
答案 0 :(得分:2)
尝试在Init事件中执行此操作:
public class MyListView : ListView
{
public MyListView()
{
this.Init += (o, e) =>
{
if (EmptyDataTemplate == null)
EmptyDataTemplate = new MyEmptyDataTemplate();
};
}
}
修改强>
再次检查后,我意识到EmptyDataTemplate
已检查是否为emtpy,但已分配的模板为EmptyItemTemplate
。但是这两种方法都可以很好地实例化模板。