2011-01-10 2 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

ну, так как он будет вызываться каждый раз, когда вы отправляете обратно, почему бы вам не написать его прямо под page_load из вашей родительской формы в разделе «Если (страница.Использование)? – Pabuc

ответ

2

В основном то, что вы хотите, является фиктивным свойством CollapsiblePanelWidth, которое обрабатывает только ширину или возвращает значение по умолчанию, если оно не было установлено.

Затем сделайте свой код настройки стиля в методе override void OnPreRender(EventArgs) вашего UserControl.

Edit: Что-то вроде этого должно быть достаточно

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 (значение! = Значение null: COLLAPSIBLEPANELWIDTH) + "px;"; Я хочу, чтобы div получил значение по умолчанию, если пользователь не указал его на своей странице. –

Смежные вопросы