2012-03-01 27 views
2

私はクラスMyListViewを持ち、ASP.NET ListViewから継承しています。プログラマがEmptyDataTemplateをaspxコードで指定しなかった場合、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(); 
      }; 
    } 
} 

編集 再びこれを確認した後、私はemtpy場合EmptyDataTemplateがチェックされたことに気づいたが、割り当てられたテンプレートがEmptyItemTemplateです。しかし、両方のメソッドはテンプレートをインスタンス化するのに適しています。

+0

申し訳ありませんが、これは機能していません。InstantiateIn()は呼び出されません。 – Mikee

+0

はMyEmptyDataTemplateサーバーコントロールまたはユーザーコントロールですか? –

+0

MyListViewのプライベート内部クラスとして宣言しました。 – Mikee

関連する問題