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

Не срабатывает ImageButton_Click у динамически добавленной ImageButton

10.10.2016, 15:01. Просмотров 486. Ответов 3

Нужна помощь! Потратил не один день на решение этой задачи.

Задача: Есть дерево, по выбору одно из узлов дерева формируется в UpdatePanel все что находится в дереве в виде panel в panel и один из элементов конечной цепочки идет ImageButton. Количество Panel в Panel меняться и сколько конечных надо сделать не известно, по этому встает необходимость добавлять все через код. Все строится и правильно отображается, но ImageButton не отправляет на обработчик, а просто сразу обновляется страница. Нужна помощь!

Код С#

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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
protected  void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
        {
            BokPanel(TreeView1.SelectedNode.Value.ToString());
        }
 
protected void BokPanel(string kod)
        {
 
            Panel panel1 = new Panel();
            UpdatePanel4.ContentTemplateContainer.Controls.Add(panel1);
            panel1.ID = "Panel" + TreeView1.SelectedNode.Value.ToString();
            panel1.CssClass = "urovblok";
            Label label1 = new Label();
            panel1.Controls.Add(label1);
            label1.ID = "Label" + TreeView1.SelectedNode.Value.ToString();
            label1.Text = TreeView1.SelectedNode.Text.ToString();
            
            if (TreeView1.SelectedNode.ChildNodes.Count != 0)
            {
                panel1.CssClass = "urovblok";
                docher_blok(panel1, TreeView1.SelectedNode);
            }
            else
            {
                if (TreeView1.SelectedNode.Value[0].ToString() == "d")
                {
                    panel1.CssClass = "doljblok";
                    doljnost_dop(Convert.ToInt32((TreeView1.SelectedNode.Value.ToString()).Remove(0, 1)), panel1);
                }
                else
                {
                    Label label2 = new Label();
                    panel1.Controls.Add(label2);
                    label2.ID = "Labelsr" + TreeView1.SelectedNode.Value.ToString();
                    label2.Text = "Номер id = " + TreeView1.SelectedNode.Value.ToString();
                    
                }
            }
        }
 
 protected void docher_blok(Panel panel2, TreeNode nodes_vr)
        {
            for (int i = 0; i < nodes_vr.ChildNodes.Count; i++)
            {
                TreeNode nodes_doch = nodes_vr.ChildNodes[i];
                Panel panel1 = new Panel();
                panel1.ID = "Panel" + nodes_doch.Value.ToString();
                panel1.CssClass = "urovblok";
                Label label1 = new Label();
                label1.ID = "Label" + nodes_doch.Value.ToString();
                label1.Text = nodes_doch.Text.ToString();
                panel1.Controls.Add(label1);
                if (nodes_doch.ChildNodes.Count != 0)
                {
                    panel1.CssClass = "urovblok";
                    docher_blok(panel1, nodes_doch);
                }
                else
                {
                    if (nodes_doch.Value[0].ToString() == "d")
                    {
                        panel1.CssClass = "doljblok";
                        doljnost_dop(Convert.ToInt32((nodes_doch.Value.ToString()).Remove(0, 1)), panel1);
                    }
                    else
                    {
                        Label label2 = new Label();
                        label2.ID = "Labelsr" + nodes_doch.Value.ToString();
                        label2.Text = "Номер id = " + nodes_doch.Value.ToString();
                        panel1.Controls.Add(label2);
                    }
                }
 
                panel2.Controls.Add(panel1);
            }
        }
 
        protected void doljnost_dop(int id_dolj, Panel panel2)
        {
            Panel Panel_dolj_itog = new Panel();
            panel2.Controls.Add(Panel_dolj_itog);
            Panel_dolj_itog.ID = "PanelDolj_itog" + id_dolj.ToString();
            string strok1 = " "; //Формируется строка запроса к базе
            DataTable db = GetEmployee(strok1);
            if (db.Rows.Count > 0)
            {
                foreach (DataRow row in db.Rows)
                {
                    ImageButton ImageButton1 = new ImageButton();
                    ImageButton1.ID = "ImageButton" + row["KartID"].ToString();
                    ImageButton1.ImageUrl = "~/App_Themes/Green/Image/delete_32x32.png";
                    ImageButton1.CssClass = "up";
                    ImageButton1.CommandArgument = row["KartID"].ToString();
 
                    HyperLink HyperLink_ikon = new HyperLink();
                    HyperLink_ikon.ID = "HyperLink" + row["KartID"].ToString();
                    HyperLink_ikon.NavigateUrl = ""; //ссылка на картинку
                    HyperLink_ikon.Target = "_blank";
                    HyperLink_ikon.EnableTheming = true;
                    HyperLink_ikon.EnableViewState = true;
                    HyperLink_ikon.Text = row["FioSum"].ToString();
                    HyperLink_ikon.CssClass = "ssilka";
 
                    Panel Panel_txt = new Panel();
                    Panel_txt.CssClass = "panel_txt";
                    Panel_txt.ID = "PanelTXT" + row["KartID"].ToString();
                    Panel_txt.Controls.Add(HyperLink_ikon);
 
                    Panel Panel_delete = new Panel();
                    Panel Panel_con = new Panel();
                    Image img_icon = new Image();
                    Panel_con.CssClass = "con";
                    Panel_con.ID = "PanelCON" + row["KartID"].ToString();
                    Panel_con.Controls.Add(Panel_delete);
                    Panel_con.Controls.Add(img_icon);
                    Panel_con.Controls.Add(Panel_txt);
 
                    Panel Panel_IkonBlok = new Panel();
                    Panel_IkonBlok.ID = "PanelIkonBlok" + row["KartID"].ToString();
                    Panel_IkonBlok.CssClass = "ikonblock";
                    Panel_IkonBlok.Controls.Add(Panel_con);
                    Panel_dolj_itog.Controls.Add(Panel_IkonBlok);
 
                    ImageButton1.Click+= ImageButton1_Click;
 
                    
                    Panel_delete.ID = "PanelDelet" + row["KartID"].ToString(); 
                    Panel_delete.CssClass = "delet";
                    Panel_delete.Controls.Add(ImageButton1);
 
                    }
                    img_icon.CssClass = "fot";
                }
            }
        }
 
private void ImageButton1_Click(object sender, ImageClickEventArgs e)
        {
           // работа с базой и запуск снова для отображения
 
                    BokPanel(TreeView1.SelectedNode.Value.ToString());
 
        }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2016, 15:01
Ответы с готовыми решениями:

Не срабатывает событие нажатия на ImageButton в Gridview
Пример с офф сайта брала, почему то не работает import android.content.Intent; import...

ImageButton
Проблема такая. У меня таблица с ImageButton. Они вначале пустые. По нажатию засовывается картинка...

ImageButton
Подскажите как сделать чтобы при наведении мыши на ImageButton менялось изображение в ImageButton ??

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

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

3
Lokko
Танцы с бубном
64 / 65 / 26
Регистрация: 27.03.2013
Сообщений: 279
14.10.2016, 13:46 2
может поможет дописать ImageButton1.AutoPostBack = true до клика или после. Сейчас уже не помню...
0
alexey2008
0 / 0 / 0
Регистрация: 25.12.2014
Сообщений: 4
17.10.2016, 11:59  [ТС] 3
Это все прописывается через код. Там нет такого определения. Пробовал.
0
ORLENOK
90 / 89 / 37
Регистрация: 05.08.2011
Сообщений: 419
Завершенные тесты: 5
18.10.2016, 20:57 4
alexey2008, Попробуйте сделать так:
C#
1
ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(ImageButton1);
Это строчку, сразу же после добавления кнопки на панель. Примерно на 125 строке кода выше.
0
18.10.2016, 20:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2016, 20:57

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

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

Кривой ImageButton
На дизайне по другому выглядит.Как это исправить? &lt;ImageButton ...


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

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

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