Где инициализировать свойства usercontrol перед привязкой данных? - PullRequest
1 голос
/ 10 января 2011

Как я могу написать код C # (aspx) для инициализации пользовательского элемента управления с некоторыми значениями свойств по умолчанию? Я имею в виду, где / какое событие? У меня есть пользовательский элемент управления с видом сетки, который я связываю на странице контейнера. При загрузке страницы контейнера я связываю данные. Я попытался написать код инициализации в initproperties, но это не сработало. Пожалуйста, предложите, где я могу установить значения по умолчанию для моего 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;" не добавляется.

Ответы [ 2 ]

2 голосов
/ 10 января 2011

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

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

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

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 голосов
/ 10 января 2011

Как насчет создания свойств UserControl и присвоения им значения по умолчанию? Эти свойства будут установлены при инициализации UserControl, и вы можете изменить их в коде.

Вы можете указать доступ к свойствам как общедоступный или частный или защищенный. Затем вы можете изменить общедоступные свойства родительского объекта.

Возможно, вы можете изменить свой код на что-то очень простое, пока не получите действующее свойство. Удалите вероятность того, что проблема заключается в коде, а не в самом свойстве. Получите свойство работать, а затем заставьте его делать что-то сложное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...