2011-01-10 12 views
1

いくつかの既定のプロパティ値でユーザーコントロールを初期化するためにC#コード(aspx)を書くにはどうすればよいですか?私はどこ/どのイベントを意味するのですか?私はコンテナページにバインドするグリッドビューを持つユーザーコントロールを持っています。コンテナページのページロード時に、データをバインドします。 initpropertiesに初期化コードを書こうとしましたが、うまくいきませんでした。私のusercontrolのデフォルト値はどこで設定できますか?データバインディングの前にusercontrolプロパティを初期化する場所は?

編集: 私はすでに財産があり、DIVの1つの幅を変更しています。ここで動作していないコードです。

public int CollapsiblePanelWidth 
    { 
     set 
     { 
      if (DataDiv.Attributes["style"] != null) 
      { 
       if (DataDiv.Attributes["style"].Contains("width:")) 
       { 
        string[] array = DataDiv.Attributes["style"].Split(new char[] { ';' }); 
        array = Array.FindAll(array, ContainsWidthAttribute); 
        string result = ""; 
        foreach (string s in array) 
        { 
         result += s + "; "; 
        }     
        DataDiv.Attributes["style"] = result + " width: " + Convert.ToString(value != null ? value : COLLAPSIBLEPANELWIDTH) + "px;"; 
       } 
       else 
       { 
        DataDiv.Attributes["style"] += " width: " + Convert.ToString(value != null? value:COLLAPSIBLEPANELWIDTH) + "px;"; 
       } 
      } 
      else 
      { 
       DataDiv.Attributes.Add("style", "width: " + Convert.ToString(value != null ? value : COLLAPSIBLEPANELWIDTH) + "px;"); 
      } 
      GridView1.Width = Unit.Parse(Convert.ToString(value != null ? value : COLLAPSIBLEPANELWIDTH - 2)); 
     } 
    } 

これは、呼び出し元プログラムの幅を設定した場合にのみ機能します。それ以外の場合は、デフォルト値style="width: 105px;"は追加されません。

+0

ASP.NET十分、右すべきですか? –

+0

おっと!ありがとう! –

+0

よくポストバックするたびに呼び出されるので、If(Page.IsPostBack)の下で親フォームのpage_loadの下に直接書き込むのはなぜですか? – Pabuc

答えて

2

基本的には、ダミープロパティCollapsiblePanelWidthは、幅を取ったり、デフォルトが設定されていない場合はそれを返すだけです。

次に、UserControlのoverride void OnPreRender(EventArgs)メソッドでスタイル設定コードを実行します。

編集:このような何かが

public MyUserControl() 
{ 
    CollapsiblePanelWidth = 105; 
} 

public int CollapsiblePanelWidth { get; set; } 

protected override void OnPreRender(EventArgs e) 
{ 
    DataDiv.Style[HtmlTextWriterStyle.Width] = CollapsiblePanelWidth.ToString(); 
    GridView1.Width = CollapsiblePanelWidth - 2; 

    base.OnPreRender(e); 
} 
+0

ただし、OnPreRenderはコンテナページのPage_loadイベントの後に呼び出されます。ユーザーはpage_loadに幅を設定し、プリレンダリングではデフォルト値でオーバーライドされます。 –

+0

@ user465876:私が意味することを示すコードサンプルを追加しました。デフォルトはコンストラクタで設定されます。したがって、ユーザーがそれを変更しない場合、デフォルトが使用されます。ユーザーがそれを変更すると、ユーザーの選択が使用されます。私はあなたのスタイル設定コードを簡略化しました。 – Greg

+0

Greg、あなたは素晴らしいです!理解しやすいシンプルなコードの素晴らしいソリューションをありがとう。良い一日を! –

0

UserControlのプロパティをに作成し、デフォルト値を与えるのはどうですか?これらのプロパティは、UserControlが初期化されたときに設定され、コードで変更することができます。

プロパティへのアクセスをパブリック、プライベート、または保護として指定できます。次に、親からパブリックプロパティを変更することができます。

おそらく、既存のプロパティを機能させるまで、コードを実際のものに簡単に変更することができます。プロパティー自体ではなく、問題のコードである可能性を排除します。物件を稼動させてから、何か複雑にする。

+0

私は実際にプロパティを持っていますが、動作していないようです。基本的には、私はSetプロパティしか持たず、DIVの幅を設定します。 DataDiv.Attributes ["style"] + = "width:" + Convert.ToString(value!= null?value:COLLAPSIBLEPANELWIDTH)+ "px;"; ユーザが自分のページにそれを指定していない場合、divにデフォルト値を設定します。 –

関連する問題