Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к свойству контрола из конструктора, надо получить значение свойства из aspx  
:(
    Опции темы
makosh
Дата 28.3.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 28.3.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Проблема следующая: есть контрол, у него есть свойство, задающееся на aspx и указывающее путь к xml файлу. Этот файл надо получить в конструкторе этого контрола и построить по находящимся в нем данным дефолтовые значения. При этом некоторые из этих значений могут быть определены также на aspx, и не должны перезатираться дефолтовыми. Поэтому и приходится обрабатывать XML еще в конструкторе, до инициализации. Кто знает, как получить указанное значение до инициализации, подскажите плиз!
PM MAIL   Вверх
Mymik
Дата 28.3.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



makosh, может быть гораздо более простой и логичный способ будет попросту проверят не определены ли эти параметры уже в this.Page ??? это намного проще будет как по мне... 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
makosh
Дата 29.3.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 28.3.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Mymik, Можно поподробнее, что значит проверить?

И еще маленькая деталь: одно из свойств - это грид (ComponentArt) со всеми вытекающими, т.е. на aspx код выглядит примерно так:

<WC:CBPanelGrid XmlFileGridProperties="~/GridStyle.xml"  ID="CBGrid1"  runat="server">
   <Grid OnNeedRebind="CBGrid1_OnNeedRebind" Width="50%" runat="server">
       <Levels>
            <CA:GridLevel ShowTableHeading="true" >
                <Columns>
                  <CA:GridColumn DataField="ID" HeadingText="hidden" Visible="false"/>
                  <CA:GridColumn DataField="Name" HeadingText="Имя" EditControlType="TextBox"/>
                </Columns>
            </CA:GridLevel>
        </Levels>
    </Grid>
</WC:CBPanelGrid>

и в xml файле переопределяются свойства грида и уровней грида. Я пока даже не представляю, каким образом можно проверить определены ли они на странице (это был бы тоже вариант)
PM MAIL   Вверх
makosh
Дата 29.3.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 28.3.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Сорри, забыла сказать: пишу на C#. 
PM MAIL   Вверх
Mymik
Дата 29.3.2007, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(makosh @  29.3.2007,  10:12 Найти цитируемый пост)
это грид (ComponentArt) со всеми вытекающими

Не знаком с этим компонентом, так что даже и не представляю что за вытекающии..  smile 


Цитата(makosh @  28.3.2007,  18:46 Найти цитируемый пост)
При этом некоторые из этих значений могут быть определены также на aspx

Если они могут быть определены, значит ты их можешь как-то доставать, так ??? 
Из этого следует, что ты можешь проверять, определены ли они или нет.
Если эти свойства определены в aspx. Может быть стоит дописать еще свойства для этого UserWebConrol'а и при построении контрола проверять не равны ли нулю эти свойства ???


Цитата(makosh @  29.3.2007,  10:12 Найти цитируемый пост)
XmlFileGridProperties

Это че такое ??? это просто свойство твоего UserWebControl ??? а то я что-то не сильно понял твой кусок кода
Кстати, возьми его в тэг Сode=xml

Биндишь ты свой контрол, а точнее ее содержимое какое-то руками ??? или автоматически ???
Если руками, тогда давай ты загрузишь этот XML и потом пройдешься по нему и изменишь данные. Если не автоматически, то после того как загрузились данные, ты пройдись по контролу и переопредели те данные что определены непосредственно в aspx.

------------------------------------------------------------------------------
Что хранится в твоем xml ??? 
 -- Настройки отображаемого компонента, или там хранятся данные ??? 
 -- Или там все вместе хранится ??? (т.е. у таблицы свойства это настройки вида, а Node'ы это данные отображаемые)
------------------------------------------------------------------------------

Самый простой способ(а так же все на что я могу догадаться имея в распоряжении те данные что ты предложил)
В твой компонент добавляем еще все те свойства что могут быть переопределены. После того как загрузился xml файл. Загрузить твой xml, после этого видоизменить в соответствии с теми свойствами что были определены или отличны от дефолтовых значений. А потом уже отдать на бинд.

Если же не подходит, давай рассказывай что у тебя в том xml и что обозначает твой кусок кода... я допустим не понимаю что за свойства там...


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
makosh
Дата 29.3.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 28.3.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



суть состоит в том, что во всем проекте единый дизайн для всех гридов, но отдельные свойства (напр., ширина и высота - и не только) могут меняться на некоторых страницах. Поэтому хотелось бы весь дизайн хранить в xml файле, но иметь возможность переопределить любое свойство на странице, при этом все остальные беря из файла. Надо заметить, что возможна ситуация, когда в xml свойство было переопределено, на странице оно тоже переопределено, причем его значение на странице совпадает с изначальным дефолтовым


вот ВСЕ  свойства моего контрола:

private string _XmlFileGridProperties;
private ComponentArt.Web.UI.Grid myGrid;

public string XmlFileGridProperties
{
   get
   {
        if (_XmlFileGridProperties == string.Empty)
        {
            _XmlFileGridProperties = "";
        }
        return _XmlFileGridProperties;
   }
   set {_XmlFileGridProperties = value;}
}

[PersistenceMode(PersistenceMode.InnerProperty)]
public ComponentArt.Web.UI.Grid Grid
{
  get {return myGrid;}
  set{myGrid = value;}
}

все остальное - что внутри тега Grid - это свойства уже существующего грида
этот грид плох тем, что от него нельзя унаследоваться :(

Цитата

Если руками, тогда давай ты загрузишь этот XML и потом пройдешься по нему и изменишь данные. Если не автоматически, то после того как загрузились данные, ты пройдись по контролу и переопредели те данные что определены непосредственно в aspx.


именно так я и делаю, но опять-таки я могу его загрузить только на событии OnInit и не могу определить было ли определено это свойство на странице. Вот пройтись по контролу и переопределить те данные что определены непосредственно в aspx - я пока не нашла, как это можно сделать

по поводу доставать: у этого грида есть уже заданные по умолчанию значения и конечно я их могу доставать. Но нулю они, к сожалению, не равны
конечно можно было бы попробовать сравнивать их дефолтовые значения, но в случае, если на странице они определены равными дефолтовым, то мы не узнаем надо ли заменять их значениями из файла



Это сообщение отредактировал(а) makosh - 29.3.2007, 20:31
PM MAIL   Вверх
Mymik
Дата 30.3.2007, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(makosh @  29.3.2007,  20:16 Найти цитируемый пост)
я могу его загрузить только на событии OnInit

Почему только в OnInit ??? почему в Page_Load или еще где-то в другом методе ты не можешь его загрузить ??? 


Цитата(makosh @  29.3.2007,  20:16 Найти цитируемый пост)
Вот пройтись по контролу и переопределить те данные что определены непосредственно в aspx - я пока не нашла, как это можно сделать

А в чем трудность ???
Если свойства в контроле не readonly и переопределенные скойства в Aspx носят одинаковые именя, тогда можно сделать с помощью System.Reflection

Код

        /* Получаем все методы нашей ASPX страницы */
        PropertyInfo[] properties = this.Page.GetType().GetProperties();
            
        /* Перебираем все методы */
        foreach (PropertyInfo protepty in properties)
        {
            /* Если одноименное свойство существует и тип данных совпадает */
            if (Grid.GetType().GetProperty(protepty.Name) != null && Grid.GetType().GetProperty(protepty.Name).PropertyType.Equals(protepty.PropertyType))
            {
                /* Создаем массив параметров */
                object param = new object[1];
                /* Вызываем на выполнение метод из родителя, т.к. параметры нам не нужны, то второе передаваемое значение null, а первое ссылка на объект в котором есть это свойство */
                param[0] = protepty.GetGetMethod().Invoke(this.Page, null);

                /* А теперь вызываем свойство Set из твоего грида */
                Grid.GetType().GetProperty(protepty.Name).GetSetMethod().Invoke((object)Grid, param);
            }
        }

где this.Page это объект страницы aspx к которой принадлежит контрол
Grid это объект твоего грида.

Вроде бы нигде не ошибся... Если где ошибся, то подправь, в принципе идея тут прослеживается (как мне кажется)

Если возникает где-то в другом месте трудность, то опиши по какой причине ты не можешь достучаться...


Цитата(makosh @  29.3.2007,  20:16 Найти цитируемый пост)
Но нулю они, к сожалению, не равны
конечно можно было бы попробовать сравнивать их дефолтовые значения, но в случае, если на странице они определены равными дефолтовым, то мы не узнаем надо ли заменять их значениями из файла

А какая разница тогда ??? т.е. даже если мы их заменим, то они все равно будут теме же... какая разница ??? т.е. если число 20 заменить на число 20 то сам смысл этого не поменяется...


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
makosh
Дата 30.3.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 28.3.2007
Где: Санкт-Петербург

Репутация: нет
Всего: нет



наверное, вся проблема была в том, что я плохо знаю System.Reflection и не догадалась, что нужно было Invoke вызвать. Еще не проверяла, сейчас куча работы, которую надо было "еще вчера" сделать,  на выходных проверю. Спасибочки за помощь!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.