Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
achro
0 / 0 / 1
Регистрация: 24.03.2012
Сообщений: 2
1

Добавить кнопки в User Control динамически

27.03.2012, 20:55. Просмотров 1447. Ответов 2
Метки нет (Все метки)

Всем здравствуйте. Помогите решить следующую проблему. Есть User Control:
HTML5
1
2
3
4
5
6
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WebUserControl1.ascx.cs" Inherits="WebApplication1.WebUserControl1" %>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
<asp:Panel ID="Panel1" runat="server">
</asp:Panel>
<asp:Panel ID="Panel2" runat="server">
</asp:Panel>
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
 
namespace WebApplication1
{
    public partial class WebUserControl1 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
 
        }
 
        protected void Button1_Click(object sender, EventArgs e)
        {
            Button MyButton;
            for (int i = 0; i < 10; i++) {
                MyButton = new Button();
                MyButton.ID = "B" + i;
                MyButton.Text = "B" + i;
                MyButton.Click +=new EventHandler(MyButton_Click);
                Panel1.Controls.Add(MyButton);
            }
        }
        protected void MyButton_Click(object sender, EventArgs e) 
        { 
            Button MyButton = new Button();
            MyButton.ID = "C" + sender.ToString();
            MyButton.Text = "C";
            MyButton.Click += new EventHandler(MyButton_Click1);
            Panel2.Controls.Add(MyButton);
        }
        protected void MyButton_Click1(object sender, EventArgs e) {
            Response.Write("1234567890");
        }
    }
}
Есть форма с компонентом:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
 
<%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %>
 
<!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">
    <div>
        <uc1:WebUserControl1 ID="WebUserControl11" runat="server" />
    </div>
    </form>
</body>
</html>
В User control одна кнопка и две панели. По нажатию кнопки должны появиться несколько кнопок в Panel1 с обработкой нажатия. Затем по нажатию одной из кнопок из панели один, должна появиться кнопка в Panel2 тоже с обработкой нажатия. Буду признателен за любую помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2012, 20:55
Ответы с готовыми решениями:

Какая разница между Web server control, Composite control и User Control
Подскажите, пожалуйста, какая разница между Web server control, Composite control и User Control, а...

Передача параметра в User Control
Народ подскажите как передать параметр в User Control !??!??

Как User control упаковать в dll
Получил такое задание создать контрол и что бы он был в dll и как к его полям, если он в dll,...

Считывание даты из User Control на базе JQuery DatePicker
Здравствуйте! Для ввода и считывания дат на разных страницах сайта решил сделать User Control на...

Можно ли использовать User Control, созданный в одном приложении, в другом?
Имеется 2 самостоятельных ASP.NET приложения. Можно ли использовать User Control, созданный в одном...

2
sau
2087 / 1667 / 285
Регистрация: 22.07.2011
Сообщений: 6,385
Завершенные тесты: 1
27.03.2012, 22:31 2
Что бы динамически создаваемые контролы работали правильно (работали обработчики событий, загружались вьюстейты), их нужно добавлять не позже Page.Load., ну и нужно хранить информацию для повторного воссоздания после постбэка.
Была ли нажатка кнопка можно определить так:
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
public partial class _Default : System.Web.UI.Page
    {
        [Serializable]
        class ButtonInfo
        {
            public string Text;
            public string ID;
            public string Target;
        }
 
        private List<ButtonInfo> PanelButtonList
        {
            get
            {
                //Or Session
                if (ViewState["PanelButtons"] == null) ViewState["PanelButtons"] = new List<ButtonInfo>();
                return (List<ButtonInfo>)ViewState["PanelButtons"];
            }
        }
 
        private ButtonInfo CreateButton(string ID, string Text, string TargetID)
        {
            Button btn = new Button();
            btn.ID = ID;
            btn.Text = Text;
 
            if (TargetID == Panel1.ID) btn.Click += new EventHandler(Panel1Button_Click);
            if (TargetID == Panel2.ID) btn.Click += new EventHandler(Panel2Button_Click);
            
            FindControl(TargetID).Controls.Add(btn);
            return new ButtonInfo { ID = ID, Text = Text, Target = TargetID };
        }
 
        protected void Page_Load(object sender, EventArgs e)
        {
            //Загружаем ранее созданные кнопки
            foreach (var btnInfo in PanelButtonList) CreateButton(btnInfo.ID, btnInfo.Text, btnInfo.Target);
 
            if (IsPostBack)
            {
                //Нажали Button1
                if (Request[Button1.UniqueID] != null) for (int i = 0; i < 10; i++) PanelButtonList.Add(CreateButton(null, "Panel1_Btn" + Panel1.Controls.Count, "Panel1"));
                //Нажали на кнопку в панели
                foreach (Button btn in Panel1.Controls) if (Request[btn.UniqueID] != null) PanelButtonList.Add(CreateButton(null, "Panel2_Btn" + Panel2.Controls.Count, "Panel2"));
            }
        }
 
       
        protected void Panel1Button_Click(object sender, EventArgs e)
        {
        }
 
        protected void Panel2Button_Click(object sender, EventArgs e)
        {
            Response.Write("1234567890");
        }
 
    }
1
achro
0 / 0 / 1
Регистрация: 24.03.2012
Сообщений: 2
28.03.2012, 11:35 3
Отлично!!! Огромное человеческое спасибо. Как раз то, что надо. Недавно начал изучать и не разбираюсь в тонкостях. Сам бы не осилил.

Добавлено через 12 часов 25 минут
Возник еще один вопрос(может и глупый). Почему тот же код, но с применением ImageButton не работает корректно. Т.е. здесь
C#
1
2
3
4
5
6
7
8
9
10
 if (IsPostBack)
            {
                //Нажали Button1
                if (Request[Button1.UniqueID] != null)
                {
                    for (int i = 0; i < 10; i++) PanelButtonList.Add(CreateButton(null, "Panel1_Btn" + Panel1.Controls.Count, "Panel1"));
                }
                //Нажали на кнопку в панели
                foreach (Control btn in Panel1.Controls) if (Request[btn.UniqueID] != null) PanelButtonList.Add(CreateButton(null, "Panel2_Btn" + Panel2.Controls.Count, "Panel2"));
            }
не ловится нажатие ImageButton?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2012, 11:35

Control panel, как добавить новые пункты?
Словами долго, проще, наверное, картинкой: Это я догадываюсь как реализовать, материал есть. Тут...

Динамически добавить textbox
Привет всем. Как можно динамически добавить textbox в заранее существующую ячейку таблицы.

Динамически создающиеся кнопки с уникальными именами
Решил переделать свою кусровую на С#, тема курсовой была инет магазин... Нужно по нажатию кнопки...


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

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

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