2011-01-10 7 views
1

일부 기본 속성 값을 사용하여 사용자 정의 컨트롤을 초기화하기 위해 C# 코드 (aspx)를 작성하려면 어떻게해야합니까? 나는 어떤 이벤트를 의미합니까? 컨테이너 페이지에 바인딩하는 gridview 가진 사용자 정의 컨트롤이 있습니다. 컨테이너 페이지의 페이지로드시 데이터를 바인딩합니다. initproperties에 초기화 코드를 작성하려했지만 작동하지 않았습니다. 내 usercontrol에 대한 기본값을 어디에 설정할 수 있습니까?데이터 바인딩 전에 usercontrol 속성을 초기화하는 위치는 어디입니까?

편집 : DOK가 제안한대로. 이미 속성이 있으며 DIV 중 하나의 너비가 변경됩니다. 다음은 작동하지 않는 코드입니다.

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

포스트 백 (postback) 할 때마다 호출되므로, If (Page.IsPostBack) 아래에서 상위 폼의 page_load 바로 아래에 직접 쓰지 않는 이유는 무엇입니까? – Pabuc

답변

2

기본적으로 너비를 취하거나 기본값을 반환하지 않는 더미 속성 CollapsiblePanelWidth가 필요합니다.

그런 다음 사용자 설정 컨트롤의 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에서 너비를 설정하고 prerender에서 내 기본 값으로 오버라이드됩니다. –

+0

@ user465876 : 무슨 뜻인지 보여주기 위해 코드 샘플을 추가했습니다. 기본값은 생성자에서 설정됩니다. 따라서 사용자가 변경하지 않으면 기본값이 사용됩니다. 사용자가 변경하면 사용자의 선택이 사용됩니다. 또한 스타일 설정 코드를 단순화했습니다. – Greg

+0

그렉, 대단하다! 이해하기 쉬운 간단한 코드로 멋진 솔루션을 보내 주셔서 감사합니다. 좋은 하루 되세요! –

0

UserControl의 속성을 만들고 기본값을 지정하는 방법은 어떻습니까? 이러한 속성은 UserControl이 초기화 될 때 설정되며 코드에서 변경할 수 있습니다.

속성에 대한 액세스를 공개 또는 비공개 또는 보호로 지정할 수 있습니다. 그런 다음 부모로부터 공용 속성을 변경할 수 있습니다.

아마도 기존 속성을 작동시킬 때까지 코드를 실제로 단순한 것으로 변경할 수 있습니다. 속성 자체가 아니라 문제의 코드 일 가능성을 제거하십시오. 재산을 일하게하고 복잡한 일을하도록하십시오.

+0

나는 실제로 재산을 가지고 있지만 일하지 않는 것 같습니다. 기본적으로 Set 속성 만 있고 DIV의 너비를 설정합니다. DataDiv.Attributes [ "style"] + "width :"+ Convert.ToString (value! = null? value : COLLAPSIBLEPANELWIDTH) + "px;"; 사용자가 자신의 페이지에 div를 지정하지 않으면 div가 기본값을 갖기를 원합니다. –

관련 문제