【问题标题】:ASP.NET ListView - How to set EmptyDataTemplate programmatically?ASP.NET ListView - 如何以编程方式设置 EmptyDataTemplate?
【发布时间】:2019-01-23 10:03:11
【问题描述】:

我有一个 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 组件生命周期和模板应该设置在其他地方。

【问题讨论】:

    标签: asp.net listview


    【解决方案1】:

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

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

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

    【讨论】:

    • 对不起,这不起作用,没有调用 InstantiateIn()。
    • MyEmptyDataTemplate 是服务器控件还是用户控件?
    • 我将它声明为 MyListView 的私有内部类。
    • funny.. 再次查看条件后分配了什么
    • 啊,我现在可以看到了...我愚蠢的复制/粘贴错误...非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多