Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer / 14 сообщений из 14, страница 1 из 1
03.11.2010, 19:23
    #36937107
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
Добрый вечер :)

Каким образом лучше организовать динамическое создание вкладок на TabContainer с различным контекстом (т.е на каждую вкладку в зависимости от ее типа будет встраиваться свой юзер контрол). Также необходимо предусмотреть удаление вкладок.

При создании вкладок и их хранении проблем нет - инфу о созданных вкладках держу во viewstate(и обновляю при лоаде updatepanel на которой находится табконтейнер), проблемы начинаются при удалении а именно сбрасывается информация которая лежит на последующих вкладках после удаляемой.
...
Рейтинг: 0 / 0
03.11.2010, 19:26
    #36937111
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
Проблема решается если не удалять вкладки а скрывать их при onLoad на UpdatePanel, но это решение смотрится явно дико
...
Рейтинг: 0 / 0
04.11.2010, 08:31
    #36937563
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
up
...
Рейтинг: 0 / 0
04.11.2010, 11:36
    #36937747
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
newDealer,

по-моему, отличное решение. посоветовала бы почитать одну статью на gotdotnet про динамически добавляемые контролы, не могу найти ссылку...
...
Рейтинг: 0 / 0
04.11.2010, 14:27
    #36938010
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
ZorianewDealer,

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

Тут просто проблема в том что фактически ничего не удаляется. Т.е на каждом OnLoad на UpdatePanel мы воссоздаем все в том числе и удаленные вкладки, разница лишь в том что они невидимые. В итоге состояние контента(контролов) расположенных на этих вкладках постоянно увеличивается, и увеличивается соотвественно ViewState, хранящий состояние этих контролов. Если же эти вкладки удалять то ViewState неверно загружается, т.е удалили вкладку 4 например ее содержимое с удовольствием поехало на вкладку 5 и т.д.
На своих контролах переопределять их состояние при загрузке вообще не хочется (это будет еще тот огород :( ) . Должно быть явно красивое решение по этому поводу, на забугорных сайтах его к сожалению не нашел.
...
Рейтинг: 0 / 0
04.11.2010, 14:33
    #36938017
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
забавный баг, показывающий детали сохранения вьюстейт.
...
Рейтинг: 0 / 0
04.11.2010, 14:34
    #36938020
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
newDealer В итоге состояние контента(контролов) расположенных на этих вкладках постоянно увеличивается, и увеличивается соотвественно ViewState, хранящий состояние этих контролов.
этот момент мне не ясен - почему постоянно увеличивается?
...
Рейтинг: 0 / 0
04.11.2010, 14:45
    #36938030
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
ZorianewDealer В итоге состояние контента(контролов) расположенных на этих вкладках постоянно увеличивается, и увеличивается соотвественно ViewState, хранящий состояние этих контролов.
этот момент мне не ясен - почему постоянно увеличивается?

Потому что при UpdatePanel load я воссоздаю вкладки , загружаю их из некой List<keyValuePair<objname, visible>>(лежащей во ViewState) хранящей имя вкладки и признак видимости. т.е я коллекцию не чищу а воссоздаю ее --> при удалении вкладки теряется ее видимость
...
Рейтинг: 0 / 0
05.11.2010, 16:15
    #36939377
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
проверка
...
Рейтинг: 0 / 0
05.11.2010, 16:34
    #36939410
stamford_User
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
Советую отказаться от вюстейта - по многим причинам - производительность в том числе.
Ниже кусок кода.
Для управления вкладками который создаются и пересоздаются на лету испольщуется менеджер основанный на сессия и кеше.
Так этот код сразу работать не будет - но думаю понять куда копать - можно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public void CreateTab(TabContainer parent, string welcomeMsg, string headerText, string pathControl, int activeIndex, bool needCloseButton, int param, int param2)
        {
            var welcomeLiteral = new LiteralControl();
            welcomeLiteral.Text = welcomeMsg;
            TabPanel WelcomeTab = new TabPanel();
            if (needCloseButton)
                WelcomeTab.HeaderTemplate = new DynamicallyCreatedTemplate(ListItemType.Header, headerText);
            else
                WelcomeTab.HeaderText = headerText;

            WelcomeTab.Controls.Add(welcomeLiteral);

            var control = LoadControl(pathControl);
            if (control is SnglNmCtrl)
                ((SnglNmCtrl)control).setInstrumentID(param);
            else if (control is CdsCntrctCtrl)
                ((CdsCntrctCtrl)control).setRequiredValues(param, param2, ref parent);
            else if (control is CdsIndxCtrl)
                ((CdsIndxCtrl)control).setRequiredValues(param, parent, this.dType[0]);
            else if (control is IndxTrancheCtrl)
                ((IndxTrancheCtrl)control).setRequiredValues(param, param2, this.dType[0]);
            else if (control is AddEditIndexComponentCtrl)
            {
                ((AddEditIndexComponentCtrl)control).setRequiredValues(param, this.typeWindow, ref parent);
                ((AddEditIndexComponentCtrl)control).ID = "AddEditIndexComponentCtrl1";
            }
            else if (control is IndxComponentCtrl)
            {
                ((IndxComponentCtrl)control).setRequiredValues(param, "onIndexComponentsLoad", parent);
                ((IndxComponentCtrl)control).ID = "IndxComponentCtrl1";
            }

            //

            WelcomeTab.Controls.Add(control);

            parent.Tabs.Add(WelcomeTab);

            parent.ActiveTabIndex = activeIndex;

        }
...
Рейтинг: 0 / 0
05.11.2010, 23:10
    #36939753
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
stamford_UserСоветую отказаться от вюстейта - по многим причинам - производительность в том числе.
Ниже кусок кода.
Для управления вкладками который создаются и пересоздаются на лету испольщуется менеджер основанный на сессия и кеше.
Так этот код сразу работать не будет - но думаю понять куда копать - можно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
public void CreateTab(TabContainer parent, string welcomeMsg, string headerText, string pathControl, int activeIndex, bool needCloseButton, int param, int param2)
        {
            var welcomeLiteral = new LiteralControl();
            welcomeLiteral.Text = welcomeMsg;
            TabPanel WelcomeTab = new TabPanel();
            if (needCloseButton)
                WelcomeTab.HeaderTemplate = new DynamicallyCreatedTemplate(ListItemType.Header, headerText);
            else
                WelcomeTab.HeaderText = headerText;

            WelcomeTab.Controls.Add(welcomeLiteral);

            var control = LoadControl(pathControl);
            if (control is SnglNmCtrl)
                ((SnglNmCtrl)control).setInstrumentID(param);
            else if (control is CdsCntrctCtrl)
                ((CdsCntrctCtrl)control).setRequiredValues(param, param2, ref parent);
            else if (control is CdsIndxCtrl)
                ((CdsIndxCtrl)control).setRequiredValues(param, parent, this.dType[0]);
            else if (control is IndxTrancheCtrl)
                ((IndxTrancheCtrl)control).setRequiredValues(param, param2, this.dType[0]);
            else if (control is AddEditIndexComponentCtrl)
            {
                ((AddEditIndexComponentCtrl)control).setRequiredValues(param, this.typeWindow, ref parent);
                ((AddEditIndexComponentCtrl)control).ID = "AddEditIndexComponentCtrl1";
            }
            else if (control is IndxComponentCtrl)
            {
                ((IndxComponentCtrl)control).setRequiredValues(param, "onIndexComponentsLoad", parent);
                ((IndxComponentCtrl)control).ID = "IndxComponentCtrl1";
            }

            //

            WelcomeTab.Controls.Add(control);

            parent.Tabs.Add(WelcomeTab);

            parent.ActiveTabIndex = activeIndex;

        }

Спасибо за код но проблема останется, как создавать таб панели и как добавлять на них динамически контент я знаю. проблема со Viewstate этих динамически создаваемых контролов (см.выше)
...
Рейтинг: 0 / 0
07.11.2010, 19:35
    #36941091
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
up
...
Рейтинг: 0 / 0
13.11.2010, 02:16
    #36953150
newDealer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
one more up xD
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
03.05.2012, 08:22
    #37779862
Trus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer
newDealerкак создавать таб панели и как добавлять на них динамически контент я знаю.
скажите пожалуйста как это делается--маленький примерчик если можно.
и как программно можно перейти от tabpanel к tabpanel в tabkontainer?
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Ajaxcontroltoolkit - динамичкское создание вкладок на TabContainer / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]