Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Sita RaiNy
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
1

Динамическое создание контролов

09.12.2014, 17:46. Просмотров 667. Ответов 2
Метки нет (Все метки)

Сама задачка в приложении к посту, чтобы было нагляднее. Постаралась решить задачу следующим образом, но добавляется только один раз, а потом снова удаляет.
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
public partial class Lab5 : System.Web.UI.Page
{
    int I = 50;
    int K = 1;
 
    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox TextBox1 = new TextBox();
        TextBox1.ID = "TextBox1";
        TextBox1.Style["Position"] = "Absolute";
        TextBox1.Style["Top"] = "50px";
        TextBox1.Style["Left"] = "25px";
        form1.Controls.Add(TextBox1);
 
        Button Button1 = new Button();
        Button1.ID = "Button1";
        Button1.Text = "Добавить строку";
        Button1.Style["Position"] = "Absolute";
        Button1.Style["Top"] = "50px";
        Button1.Style["Left"] = "200px";
        form1.Controls.Add(Button1);
        Button1.Click += Button_Click;
    }
 
    protected void Button_Click(object sender, EventArgs e)
    {
        I += 10;
        K++;
        TextBox TextBox1 = new TextBox();
        TextBox1.ID = "TextBox" + K.ToString();
        TextBox1.Style["Position"] = "Absolute";
        //TextBox1.Style["Top"] = Convert.ToString(I); //эта строка не воспринимается 
        TextBox1.Style["Left"] = "25px";
        form1.Controls.Add(TextBox1);
 
        Button Button1 = new Button();
        Button1.ID = "Button" + K.ToString();
        Button1.Text = "Добавить строку";
        Button1.Style["Position"] = "Absolute";
        //Button1.Style["Top"] = Convert.ToString(I); 
        Button1.Style["Left"] = "200px";
        form1.Controls.Add(Button1);
        Button1.Click += Button_Click;
    }
}
0
Миниатюры
Динамическое создание контролов  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2014, 17:46
Ответы с готовыми решениями:

Динамическое создание контролов
Здравствуйте. Я начинающий программист. http://www.codemag.com/Article/0305101 Не могу выполнить...

wizard динамическое создание контролов
Добрый день! Есть элемент Wizard на странице. На некотором его шаге в WizardStep в обработчике...

Динамическое создание контролов в UpdatePanel
Много читал про динамическое создание контролов и обработку их событий но никак не смог найти...

Динамическое создание контролов на WEB-форме
В своем приложении я перехожу по ссылке с страницы 1.aspx на 2.aspx, имея в переменных сеанса...

Динамическое создание контролов, количество которых заранее не известно
Всех с наступающим! Нужна реализация динамически добавляемых DropDownList, примерно как тут только...

2
skynick99
116 / 116 / 30
Регистрация: 06.12.2012
Сообщений: 254
10.12.2014, 07:24 2
задание настолько не корректно поставлено, что полный абзац.
у тебя банальная ошибка, PostBack, т.е. после нажатия на кнопку страница перерисовывается заново... проще говоря надо где то кнопки сейвить допустим ViewState...
и тем более, это все делается, проще всего, через серверный элемент ListView, + ViewState. Ну мне лично кажется что вы его не учили. так держи в твоем варианте.
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
72
73
74
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
public partial class _Default : System.Web.UI.Page
{
    List<MyTextBox> my_textbox;
 
    protected void Page_Load(object sender, EventArgs e)
    {
        CreateFirstElements();
 
        if (ViewState["SomeTextBox"] == null)
            ViewState["SomeTextBox"] = new List<MyTextBox>();
 
        my_textbox=(List<MyTextBox>)ViewState["SomeTextBox"];
 
        
    }
    public void CreateFirstElements()
    {
        TextBox tb_input = new TextBox();
        tb_input.ID = "tb_input";
        tb_input.Style["Position"] = "Absolute";
        tb_input.Style["Top"] = "50px";
        tb_input.Style["Left"] = "25px";
        form1.Controls.Add(tb_input);
 
        Button bt_add = new Button();
        bt_add.ID = "bt_add";
        bt_add.Text = "Добавить строку";
        bt_add.Style["Position"] = "Absolute";
        bt_add.Style["Top"] = "50px";
        bt_add.Style["Left"] = "200px";
        bt_add.Click += new EventHandler(bt_add_Click);
        form1.Controls.Add(bt_add);
       
    }
    public void Refresh()
    {
        int i = 0;
        foreach (MyTextBox item in my_textbox)
        {
            TextBox tb_someone = new TextBox();
            tb_someone.ID = "tb_" + i.ToString();
            tb_someone.Text = item.Text;
            form1.Controls.Add(tb_someone);
            i++;
        }
        ViewState["SomeTextBox"] = my_textbox;
    }
   
    void bt_add_Click(object sender, EventArgs e)
    {
        if (my_textbox.Count < 10)
        {
            my_textbox.Add(new MyTextBox() { Text = ((TextBox)form1.FindControl("tb_input")).Text });
        }       
        Refresh();
    }
}
 
[Serializable]
public class MyTextBox
{    
    public string Text
    {
        get;
        set;
    }
}
Добавлено через 51 минуту
а вот как я это вижу...
HTML5
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
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ListView ID="lv_hobby" runat="server" InsertItemPosition="LastItem" OnItemCommand="lv_hobby_ItemCommand">
        <LayoutTemplate>
            <table id="Table1" cellpadding="0" cellspacing="0" runat="server">
                <tr id="itemPlaceholder">
                </tr>
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr id="Tr1" runat="server">
                <td>
                    <asp:Label ID="lb_text" Text='<%# Eval("Text") %>' runat="server" />
                </td>
                <td style="width: 225px;">
                    <asp:LinkButton ID="lbt_edit" CommandName="EditButton" Text="Edit" runat="server" />
                    <asp:LinkButton ID="lbt_delete" CommandName="DeleteButton" Text="Delete" runat="server" />
                </td>
            </tr>
        </ItemTemplate>
        <EditItemTemplate>
            <tr id="Tr2" runat="server">
                <td>
                    <asp:TextBox ID="tb_hobby_text_edit" MaxLength="25" Text='<%#Eval("Text") %>' runat="server" />
                </td>
                <td>
                    <asp:LinkButton ID="lbt_save" CommandName="Save" Text="Save" runat="server" />
                    <asp:LinkButton ID="lbt_cancel" CommandName="CancelButton" Text="Cancel" runat="server" />
                </td>
            </tr>
        </EditItemTemplate>
        <InsertItemTemplate>
            <tr id="Tr3" runat="server">
                <td>
                    <asp:TextBox ID="tb_hobby_text_add" MaxLength="25" Text="" runat="server" />
                </td>
                <td style="width: 225px;">
                    <asp:LinkButton ID="lbt_add_hobby" CommandName="AddButton" Text="Add Hobby" runat="server" />
                </td>
            </tr>
        </InsertItemTemplate>
    </asp:ListView>
    </form>
</body>
</html>
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
public partial class _Default : System.Web.UI.Page
{
    
 
    protected void Page_Load(object sender, EventArgs e)
    {
            if (!IsPostBack)
            {
                ViewState["SomeTextBox"] = new List<MyTextBox>();
                lv_hobby.DataBind();
            }
    }
 
    protected void lv_hobby_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        List<MyTextBox> my_textbox = (List<MyTextBox>)ViewState["SomeTextBox"]; 
        
        if (e.CommandName == "AddButton")
        {
            if (my_textbox.Count < 10)
            {
                TextBox text_of_button = (TextBox)lv_hobby.InsertItem.FindControl("tb_hobby_text_add");
 
                if (text_of_button.Text == string.Empty)
                    text_of_button.Text = "Sport or somthing else";
 
                my_textbox.Add(new MyTextBox() { ID = my_textbox.Count, Text = text_of_button.Text });
                ViewState["SomeTextBox"] = my_textbox;
 
                lv_hobby.EditIndex = -1;
                lv_hobby.DataSource = my_textbox;
                lv_hobby.DataBind();               
            }
 
        }
        if (e.CommandName == "Save")
        {
            TextBox text_of_button = (TextBox)lv_hobby.EditItem.FindControl("tb_hobby_text_edit");
            my_textbox[e.Item.DisplayIndex].Text = text_of_button.Text;
            ViewState["SomeTextBox"] = my_textbox;
 
            lv_hobby.EditIndex = -1;
            lv_hobby.DataSource = my_textbox;
            lv_hobby.DataBind();          
 
        }
        if (e.CommandName == "EditButton")
        {
            lv_hobby.EditIndex = e.Item.DisplayIndex;
            lv_hobby.DataSource = my_textbox;
            lv_hobby.DataBind();
        }
        if (e.CommandName == "DeleteButton")
        {
            my_textbox.RemoveAt(e.Item.DisplayIndex);
            ViewState["MenuButtons"] = my_textbox;
            lv_hobby.EditIndex = -1;
            lv_hobby.DataSource = my_textbox;
            lv_hobby.DataBind();
           
        }
        if (e.CommandName == "CancelButton")
        {
            lv_hobby.EditIndex = -1;
            lv_hobby.DataSource = my_textbox;
            lv_hobby.DataBind();
        }
    }
}
 
[Serializable]
public class MyTextBox
{
    public int ID { get; set; }
    public string Text
    {
        get;
        set;
    }
}
1
Sita RaiNy
0 / 0 / 1
Регистрация: 03.05.2014
Сообщений: 47
10.12.2014, 08:53  [ТС] 3
skynick99, ViewState где-то в лекциях есть, но как-то не подумала про это. Очень понравились предложенные Вами варианты. Обязательно попробую испытать оба.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2014, 08:53

Динамическое добавление контролов
Клипаю что-то наподобие сайта с новостями. Нужно добавить возможность добавления изображений к...

Динамическое добавление контролов!
Здравствуйте Уважаемые!Меня интересует вопрос, как при динамическом добавлении контролов, вставить...

Создание динамических контролов.
Почитал,у вас на форуме как создать динамически контролы,пробовал не получилось.А надо было создать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru