2012-03-01 21 views
2

我有一個類MyListView,它從ASP.NET ListView繼承。我想實現一個默認行爲 - 如果程序員沒有在aspx代碼中指定EmptyDataTemplate,MyListView將使用預定義的默認模板(MyEmptyDataTemplate類)。ASP.NET ListView - 如何以編程方式設置EmptyDataTemplate?

我曾嘗試是這樣的:

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

     base.CreateChildControls();       
    } 
} 

的MyEmptyDataTemplate實現了Itemplate接口。問題是,MyEmptyDataTemplate的InstantiateIn()方法永遠不會被調用,並且在數據源中沒有記錄的情況下,我的默認模板不會出現。顯然我錯了解ListView組件的生命週期和模板應該設置在別的地方。有人可以幫忙嗎?

回答

2

嘗試這樣做的Init事件:

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

編輯 檢查之後,我再次意識到,EmptyDataTemplate是如果emtpy檢查,但已分配的模板是EmptyItemTemplate。但是,這兩種方法都很好實例化模板..

+0

對不起,這是行不通的,InstantiateIn()沒有被調用。 – Mikee 2012-03-01 11:49:15

+0

是MyEmptyDataTemplate是服務器控件還是用戶控件? – 2012-03-01 12:01:19

+0

我將它聲明爲MyListView的私有內部類。 – Mikee 2012-03-01 12:09:32

相關問題