Форум программистов, компьютерный форум, киберфорум
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
1

Отображение динамически заполненного TabContainer'a

06.09.2016, 09:39. Показов 1083. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Использую WebForm 4. На странице располагается updatePanel в ней TabConteiner. В Page_Load() ТабКонтейнер заполняется новыми Динамическими данными (таблицы и кнопка ниже).
Структура после заполнения:

HTML5
1
2
3
4
5
6
7
8
<TabConteiner>
 
   <TabPanel>
      <Table/>
      <Button/>
    </TabPanel>
 
</TabConteiner>

Необходимо ввести информацию, нажать кнопку и увеличить количество строк в таблице БЕЗ перезагрузки всей страницы. Возможно ли это?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2016, 09:39
Ответы с готовыми решениями:

Сравнение значений динамически заданных textBox, и отображение текста в многострочном Textbox
Часть первая. Дано: динамически создаваемые TextBox'ы TextBox tb = new TextBox; for (int i=0...

Как динамически создать массив из динамически конструируемых экземпляров класса?
Есть два класса.Подразумевается ,что первый в конструкторе выделяет интовый массив длинной n,второй...

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

Как динамически изменить цвет чего либо динамически. данные хранятся в ListView
Добрый день! У меня есть код Type colors = typeof(Brushes); PropertyInfo inf =...

9
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,704
06.09.2016, 20:41 2
Ну так учитесь работать с UpdatePanel:
1. Добавить триггеры по нажатию кнопки добавления.
2. В обработчике нажатия кнопки добавлять элемент в TabContainer.
+ js-ом проверять перед отправкой на наличие значений.
0
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
07.09.2016, 09:52  [ТС] 3
IamRain, c UpdatePanel работать умею. Уверен, что не отлично, но в общем понимаю, что происходит.
триггер добавляю.
Дело в том, что т.к. контролы динамически добавляются. При PostBack'e они пропадают, если метод их добавления внесен только в
C#
1
2
3
4
if(!IsPostBack)
{
LoadControls();
}
Если же его вынести из этого if'a то будет перезагрузка страницы.
Не очень понял зачем проверка в js. Мне нужно в таблицу добавить строку. Точнее я её добавляю, при нажатии на кнопку, но происходит полная перезагрузка страницы.
0
326 / 159 / 45
Регистрация: 06.12.2012
Сообщений: 305
07.09.2016, 10:30 4
само сабой напрашивается хранения значений, где нибудь, например в той же БД (Базе данных). или взять что не будь попроще например куки, или viewstate.

Добавлено через 7 минут
вспомнил, viewstate с updatepanel не очень хорошо дружит, так что от viewstate лучше восдержатся.
0
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,704
07.09.2016, 10:37 5
Тогда просто включите ViewState на этом контроле. Все само собой заработает. Вроде UP дружит нормально с ним.
0
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
07.09.2016, 11:19  [ТС] 6
IamRain, skynick99, Так кому верить то?))

ViewState включен. значения в нём хранятся. Т.е. после перезагрузки значения в полях восстанавливаются. Но страница моргает. Даже дело не в том, что она моргает, а в том, что скролбар страницы вверх уходит.
Хотя если убрать постоянную загрузку контролов(оставить только в (!IsPostBack)), то все динамические контролы пропадают без перезагрузки страницы, ну или проходит это очень быстро и я не успеваю заметить.

Читал на многих форумах, что нужно использовать PlaceHolder с динамическими данными, но не смог найти в чем его функция. Без него у меня тоже добавляются динамические контролы. Или всё таки нужно его использовать?
0
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,704
07.09.2016, 11:23 7
Вы так делаете?
1. Триггер в UP на нажатие кнопки.
2. В обработчике нажатия кнопки добавляете элементы в TabContainer.
Покажите код UP и обработчика нажатия кнопки.
0
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
07.09.2016, 13:48  [ТС] 8
IamRain,
aspx файл:
HTML5
1
2
3
4
5
6
7
8
9
10
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="MainContent">
    <asp:UpdatePanel runat="server" ID="up1">
        <Triggers>
        </Triggers>
        <ContentTemplate>
                <ajaxToolkit:TabContainer runat="server" ID="tcCRF">
                </ajaxToolkit:TabContainer>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>
Метод Page_Load:
C#
1
 
Метод LoadForm()
Кликните здесь для просмотра всего текста

C#
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
void LoadForm(Models.CRF _crf)
        {
            foreach (Models.CRF_Section section in _crf.Sections)
            {
                AjaxControlToolkit.TabPanel tp = new AjaxControlToolkit.TabPanel();
                tp.HeaderText = section.Title;
                tp.ID = "tp" + section.Label;
 
                int columnCount = section.Items.Max(x => x.ColumnNumber);
 
                Table tableGrouped = new Table();           //широкая таблица
                TableRow trGroupedHeaders = new TableRow(); //заголовки
                TableRow trsGroupedValues = new TableRow(); //значения
 
                Button btnAdd = new Button();   //кнопка добавить
                btnAdd.ID = "btnAdd";
                btnAdd.Click +=btnAdd_Click;
                btnAdd.Text = "Добавить";
                
                List<CRF_Item> groupedItems = section.Items
                    .Where(x => !x.Ungrouped)
                    .OrderBy(x=>x.CRF_ItemID).ToList(); //итемы в группе
 
 
                #region Group
                if (groupedItems.Count > 0)
                {
                    ///...
                    ///...
                    ///...
 
                    tableGrouped.Rows.Add(trGroupedHeaders); //добавление шапки
                    if(addedRows.Length>0)
                        tableGrouped.Rows.AddRange(addedRows); //введенные данные
                    tableGrouped.Rows.Add(trsGroupedValues); //добавление пустых полей
 
                    //////////////////////отрисовка добавленных строк/////////////////////////
                    TableRow addingTR = new TableRow();
                    for (int j = 0; j < RowCount; j++)
                    {
                        for (int i = 0; i < groupedItems.Count; i++)
                        {
                            TableCell tc = new TableCell();
                            GetAddedGroupedControl(groupedItems[i], ref tc, j+2, null);
                            addingTR.Cells.Add(tc);
                        }
                        tableGrouped.Rows.AddAt(j + 2, addingTR);
                        addingTR = new TableRow();
                    }
 
                    ////////////////////////////////////////////////////
 
                    ////////////////кнопка Добавить/////////////////////
                    TableCell tcg = new TableCell();
                    trGroupedHeaders = new TableRow();
                    tcg.Controls.Add(btnAdd);
                    trGroupedHeaders.Cells.Add(tcg);
                    tableGrouped.Rows.Add(trGroupedHeaders);
                    tableGrouped.CssClass = "bigTable";
                    ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(btnAdd); //Триггер
                    ///////////////////////////////////////////////////
                }
                #endregion
 
                tp.ScrollBars = ScrollBars.Auto; //скролбар
                tcCRF.ScrollBars = ScrollBars.Auto; //скролбар
                tp.Controls.Add(tableGrouped); //таблицу в tabPanel
                tcCRF.Tabs.Add(tp); //панель в tabConteiner
 
            }
        }


Событие нажатия на кнопку btnAdd_Click:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            TableRow addingTR = new TableRow();
 
            List<CRF_Item> groupedItems = section.Items
                    .Where(x => !x.Ungrouped)
                    .OrderBy(x => x.CRF_ItemID).ToList(); //итемы в группе
 
            for (int i = 0; i < tInfo.Rows[rIndex].Cells.Count; i++)
            {
                TableCell tc = new TableCell();
                GetAddedGroupedControl(groupedItems[i], ref tc, rIndex + 1, null);
                addingTR.Cells.Add(tc);
            }
 
            RowCount++;
Код сжал. Всё писать много.

RowCount - описывается так:
C#
1
static int RowCount=0;
Нужна она для того, чтобы отрисовывать добавленные строки. Если убрать, то можно будет добавить только одну строку. Т.е. в таблице будет: шапка, ранее добавленные данные(берутся из БД), строка с ячейками ввода данных и еще одна добавленная строка. Дальше сколько бы я не нажимал на кнопку добавить, они не будут добавляться. Происходит это из-за того, что в PageLoad'e заново заполняется таблица.
0
3462 / 2473 / 695
Регистрация: 02.08.2011
Сообщений: 6,704
07.09.2016, 13:57 9
Ну так триггеров то нифига и нету.
Вот тут в последнем примере указано как работать с UP, только добавьте атрибут EventName="Сlick" для элемента "AsyncPostBackTrigger".
Умеет он работать с UP
0
91 / 90 / 37
Регистрация: 05.08.2011
Сообщений: 428
07.09.2016, 14:25  [ТС] 10
IamRain, В Методе LoadForm 60 строка. Или принципиально указывать именно в UP?

Добавлено через 5 минут
Так, как сделано сейчас, страница не перезагружается, но скролбар на странице поднимается вверх.
0
07.09.2016, 14:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2016, 14:25
Помогаю со студенческими работами здесь

Обращение к динамически созданному объекту на динамически созданной форме
Как, создав динамический объект, TButton, обратиться к нему? Unit1.cpp void __fastcall...

Проверка заполненного textbox
Как сделать проверку заполненного textbox. if (textbox1.text == &quot;&quot;) не так а чтобы в нем что то...

Динамическое создание заполненного ComboBox
Здравствуйте. Делаю класс, который создаёт экземпляр визуального объекта в Runtime. Этот класс...

Стилизация неправильно заполненного поля
Вопрос заключается в том, почему не работает псевдокласс :user-error? У него ещё нет поддержки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru