2011-07-10 5 views
2

私はTelerik ASP.Net Ajaxコントロールを使用しています(理論的には、誰が第三者コントロールを行うかは関係ありません)。私は独自のカスタムサーバーコントロール(ユーザーコントロールではありません)を作成したいと思います。このコントロールには、独自の定義済みHTML出力がありますが、Telerik DatePickerも含まれています。 Telerik DatePickerは別のサーバーコントロールであるためサーバーコントロールをカスタムサーバーコントロールに配置する正しい手順は何ですか?サードパーティのサーバーコントロールをASP.Netのカスタムサーバーコントロール内に配置する方法

私の理解では、サーバコントロールはhtml出力を記述することで動作することを理解しています。レンダリングメソッドでインスタンス化し、元のコントロールの個々のライフサイクルを保持している別のコントロールの出力を書き込むにはどうすればよいですか。

望ましい結果:多くのサードパーティ製のコントロールが含まれてい

  • 私自身のカスタムサーバーコントロール(すなわちRadDatePicker。)。複合コントロールの方向に私を指しているため@Sumoへ

ソリューション

感謝。資料はhereです。

CompositeDataBoundControlを継承するコントロールを作成することで問題を解決できました。次に、データソースをデータバインディングし、必要なカスタムコントロールの数を計算し、ArrayListに配置し、正しくインスタンス化します(CreateChildControls()には独自のライフサイクルがあります)。私はRender()メソッドでArrayListの各コントロールをDatePickerの方法でレンダリングできましたが、まだレンダリングされていないArrayListインデックスを呼び出すことができました。 例((RadDatePicker)datePickerArray(instantiatedDatePickersCount)).RenderControl(writer)

これは現時点では汚い解決策ですが、テスト目的では機能します。

答えて

2

CompositeControlを作成します。これにより、CreateChildControlsのオーバーライドを使用してHTMLマークアップとコントロールを簡単に追加できます。また、あまりにも多くのことを考える必要はありません。

いくつかのサンプルコード:

using System.ComponentModel; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 

namespace TestServerControls { 
    [DefaultProperty("Text")] 
    [ToolboxData("<{0}:GridWithHeader runat=server></{0}:GridWithHeader>")] 
    public class GridWithHeader : CompositeControl { 
     private readonly GridView _grid = new GridView(); 
     private readonly HtmlGenericControl _header = new HtmlGenericControl("h1"); 

     public string Text { 
      get { return _header.InnerHtml; } 
      set { _header.InnerHtml = value; } 
     } 

     protected override void CreateChildControls() { 
      Controls.Add(_header); 
      Controls.Add(_grid); 
     } 
    } 
} 
+0

私は 'writer'スタイルの出力を使用しないでしょうか? – Jeremy

+0

私は現時点でコンポジットコントロールを研究しています - 存在していなかったのです。 – Jeremy

+0

もう一度ありがとうございます。私は 'CompositeDataBoundControl'を使用して目的の結果を達成することができました。 'HtmlTextWriter'コードともちろん' controlName.RenderControl() 'に基づいて、' CreateChildControls() 'とそれから' Render() 'の第三者コントロールをインスタンス化できます。どうもありがとう! – Jeremy

0

他のネストされたコントロールとマークアップを含むことができるユーザーコントロール(ASCXファイル)を作成する必要があります。

+0

問題は変更がデータベースとユーザーアカウントごとにあるデータやアイテムのレイアウトや量を表示するにはあまりにも多くのさまざまな方法があります。 – Jeremy

関連する問題