我有一个类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 接口(interface)。问题是,MyEmptyDataTemplate 的 InstantiateIn() 方法永远不会被调用,并且如果数据源中没有记录,我的默认模板也永远不会出现。显然我错误地理解了 ListView 组件生命周期,模板应该设置在其他地方。
最佳答案
尝试在 Init 事件中执行此操作:
public class MyListView : ListView
{
public MyListView()
{
this.Init += (o, e) =>
{
if (EmptyDataTemplate == null)
EmptyDataTemplate = new MyEmptyDataTemplate();
};
}
}
编辑
再次检查后,我意识到 EmptyDataTemplate
被检查为空,但已分配的模板是 EmptyItemTemplate
。然而,这两种方法都可以很好地实例化模板。
关于ASP.NET ListView - 如何以编程方式设置 EmptyDataTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9515293/