2 / 2 / 0
Регистрация: 09.07.2010
Сообщений: 19
1

Treeview EventHandler

01.11.2010, 19:58. Показов 1967. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Столкнулся с пролемой. Вообщем есть класс, в котором инициализируется програмно treeview. Так вот когда создаю ему обработчик событий он почему то не работает. Тоесть при нажатии на дерево ничего не происходит. Повторно дерево инициализируется в 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
 public class Menu_constructour
    {
 public void generate_tree(PlaceHolder field)
        {
 TreeView tree = new TreeView();
            tree.ID = "tree";
// добавляем екземпляр главного класса в котором находиться событие для клика по ноду дерева
            WebForm1 web = new WebForm1();
            tree.SelectedNodeChanged += new EventHandler(web.tree_SelectedNodeChanged);
 
            tree.PopulateNodesFromClient = true;
 
            TreeNode node1 = new TreeNode();
            node1.Text = "Parent node1";
            TreeNode _node11 = new TreeNode();
            _node11.Text = "Child node";
            TreeNode _node12 = new TreeNode();
            _node12.Text = "Child node2";
            TreeNode node2 = new TreeNode();
            node2.Text = "Parent node2";
            node1.ChildNodes.Add(_node11);
            node1.ChildNodes.Add(_node12);
            tree.Nodes.Add(node1);
            tree.Nodes.Add(node2);
 
            // добавляем дерево на страницу
            field.Controls.Add(tree);
 
        }
 
    }
В коде главного класса WebForm1 событие tree_SelectedNodeChanged выглядит так:
C#
1
2
3
4
   public void tree_SelectedNodeChanged(object sender, EventArgs e)
        {
                // что то делаем
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2010, 19:58
Ответы с готовыми решениями:

Как присвоить серверному контроллу TreeView коллекцию из TreeView, в котором находится информация из БД
Здравствуйте, в общем я кидаю на страницу TreeView и хочу его динамически заполнять, но сразу куча...

EventHandler
Как добавить обработчик событий ? Делаю так: private: System::Void label_Click(System::Object^ ...

EventHandler объясните
Я знаю что "регистрация" евента на нажатие кнопки производится так -button2.Click += new...

Передача параметров EventHandler
Такой вопрос, в событие Cell_Click нужно передать параметр. Как можно это сделать? public void...

8
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
02.11.2010, 00:51 2
Цитата Сообщение от most Посмотреть сообщение
// добавляем екземпляр главного класса в котором находиться событие для клика по ноду дерева
* * * * * * WebForm1 web = new WebForm1();
а вы уверенны что это именно ТОТ экземпляр на котором размещен контрол? ссылку на форму надо передавать извне, из самой формы
0
2 / 2 / 0
Регистрация: 09.07.2010
Сообщений: 19
02.11.2010, 11:55  [ТС] 3
Цитата Сообщение от Alligieri Посмотреть сообщение
а вы уверенны что это именно ТОТ экземпляр на котором размещен контрол? ссылку на форму надо передавать извне, из самой формы
В том то и дело... Контролл размещается програмно в placeholder который находится на странице p1.aspx а размещаю я его с помощью класса menu_constructor.cs который инициализирует это дерево и много других контроллов. Вот почему то с кнопками проблем не возникает, у них есть событие "OnClientClick" и все работает замечательно при том что кнопки тоже добавляются из класса меню... а вот с деревом другая ситуация... Думаю просто статически задать дерево изначально и делать его свойство visible = true когда захочу его увидеть... решения проблемы так и не нашел... геморой какойто с этим аяксом в webforms...
0
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
02.11.2010, 12:14 4
Цитата Сообщение от most Посмотреть сообщение
Вот почему то с кнопками проблем не возникает, у них есть событие "OnClientClick" и все работает замечательно при том что кнопки тоже добавляются из класса меню
дело в том что OnClientClick - это событие клиентской стороны, просто javascript, он ищется на странице, а атрибут события - чисто клиентский
Ваш
Цитата Сообщение от most Посмотреть сообщение
tree_SelectedNodeChanged
- событиесерверной стороны, оно должно записать данные в hide поле на странице чтоб сервер мог узнать что собітие случилось. А поскольку ссылка на хендлер берется из виртуальной самосозданной формы - на реальную не пишется

Надо чтото типа

C#
1
2
3
4
5
6
public void generate_tree(PlaceHolder field, WebForm1 web)
        {
 TreeView tree = new TreeView();
            tree.ID = "tree";
// добавляем екземпляр главного класса в котором находиться событие для клика по ноду дерева
            tree.SelectedNodeChanged += new EventHandler(web.tree_SelectedNodeChanged);
Добавлено через 2 минуты
улавливаете разницу?
Цитата Сообщение от most Посмотреть сообщение
решения проблемы так и не нашел... геморой какойто с этим аяксом в webforms...
кто ищет тот всегда найдет а гемороя никакого нет - просто надо почитать книжку отдельно по Ajax, ASP.NET AJAX и серверных контролах, такие есть. Если не разобратся - да тяжело

Не по теме:

P.S. я пока не разобрался:)



Добавлено через 2 минуты
Цитата Сообщение от Alligieri Посмотреть сообщение
public void generate_tree(PlaceHolder field, WebForm1 web)
кстати тут если не ясно - web передается из формы как this
Например

C#
1
2
3
4
5
protected void PageLoad()
{
new Menu_constructour().generate_tree(this.somePlaceHolder, this);
 
}
0
2 / 2 / 0
Регистрация: 09.07.2010
Сообщений: 19
02.11.2010, 12:21  [ТС] 5
Спасиб... буду разбираться... Прост сам по себе Ajax это яваскрипт а в Asp.net я при работе с этой технологией не прописываю ни строчки кода на javascript. Согласен... чтобы докопаться до сути нужно изначально себе представлять с чем работешь.
0
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
02.11.2010, 12:27 6
Цитата Сообщение от most Посмотреть сообщение
а в Asp.net я при работе с этой технологией не прописываю ни строчки кода на javascript.
ну так можно же все изменить в ASP.NET есть не только ASP.NET AJAX (именно все большие - в отличие от Ajax), но и CallBack вызова инициированные javascriptom. Но мне кажется вы для того и используете фрейм чтоб разрабатывать быстро? javascript генерируется средой
0
2 / 2 / 0
Регистрация: 09.07.2010
Сообщений: 19
02.11.2010, 13:53  [ТС] 7
О чудо))) Оказывается все не работало потому что в коде у меня два раза создавалось это дерево при постбэке... один раз в событии OnInit а второй раз в PageLoad... Спасибо всем кто помогал разобраться....
Теперь вопрос в другом... на событие клик дерево реагирует. А вот как еще сделать чтобы по клику родительский нод раскрывался??? Тоесть сохранять состояние динамически добавленного дерева. Я так понимаю нужно в цикле проходить по нодам дерева и записывать какие из них были раскрыты и при постбеке вносить эти изменения???

Добавлено через 1 час 15 минут
Цитата Сообщение от Alligieri Посмотреть сообщение
ну так можно же все изменить в ASP.NET есть не только ASP.NET AJAX (именно все большие - в отличие от Ajax), но и CallBack вызова инициированные javascriptom. Но мне кажется вы для того и используете фрейм чтоб разрабатывать быстро? javascript генерируется средой
Фрэйм? Использую Update panel... Вот в этом та и вся грусть для меня что что то без меня генерируется... хочу разобраться как оно изнутри)
0
CEO
Эксперт С++
2258 / 1248 / 57
Регистрация: 16.03.2009
Сообщений: 3,588
02.11.2010, 14:09 8
Цитата Сообщение от most Посмотреть сообщение
хочу разобраться как оно изнутри)
почитайте Мак-Дональда ASP.NET 3.5 для профессионалов с примерами на C# и Silverlight 2 или Дино Эспозито ASP.NET and AJAX
Цитата Сообщение от most Посмотреть сообщение
Фрэйм?
.NET Framework имел ввиду
1
2 / 2 / 0
Регистрация: 09.07.2010
Сообщений: 19
02.11.2010, 20:02  [ТС] 9
спасибо большое за советы)
0
02.11.2010, 20:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.11.2010, 20:02
Помогаю со студенческими работами здесь

EventHandler выдает ошибку
На скрине видно, что первое объявление прошло, а следующие- нет.

Стандартный делегат EventHandler
Здравствуйте! Есть у меня такой код public delegate void MyDelegate(string s); public event...

Почему не срабатывает EventHandler
Имеется: 1. Юзер контрол: <UserControl x:Class="T.Test2" ...

event EventHandler<MyEventArgs>
Здравствуйте, Создаю в классе событие public event EventHandler&lt;MyEventArgs&gt; SomeEvent; И...

Зачем нужен EventHandler?
Дана задача добавить кнопку на форму только программным кодом Какую играет роль EventHandler в...

Передача переменной через Eventhandler
есть метод public static void LinkedLabelClick(object sender,EventArgs e??) { ... } нужно...


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

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

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