Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение в TreeView MySQL данных, что то странное... 
:(
    Опции темы
Дарвин
Дата 12.2.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



Есть задача отображения в TreeView данных из MySQL. Да возможно некоторые скажут, что аналоги были и т.д., но сколько я бы не мучался, не могу добиться нужного результата.

Таблица выглядит следующим образом:

id | name | parent_id 

Суть вывод из этой таблицы, да так, чтоб он читал parent_id и в нужное место в TreeView вставлял.

Вот здесь немного кода, что я сам додумался, но почему то на моменте TreeNode nNode = ((TreeNode)Nodes[lvl]); выскакивает ошибка.

http://slil.ru/26636746


Очень прошу помощи - от этого зависит возьмут на работу или нет. Спасибо.
PM MAIL ICQ   Вверх
Bogdan1024
Дата 12.2.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 1
Всего: 13



Мог бы код и здесь привести, там нечего качать.
Какая ошибка вываливается?


--------------------
user posted image
PM MAIL   Вверх
Дарвин
Дата 12.2.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



Что там есть:
Код

public void AddChildren(TreeNode parent_node, int parent_id)
        {
            MySqlCommand command = null;
            if (parent_id == -1)
                command = new MySqlCommand("SELECT * FROM tree WHERE parent_id = 0 ORDER BY id", conn);
            else
                command = new MySqlCommand("SELECT * FROM tree WHERE parent_id = " + parent_id.ToString() + " ORDER BY id", conn);

            MySqlDataReader reader = command.ExecuteReader();
            List<TreeNode> nodes = new List<TreeNode>();
            while (reader.Read())
            {
                TreeNode newNode = new TreeNode();
                newNode.Text = reader["name"].ToString();
                newNode.Tag = reader["id"];
                nodes.Add(newNode);
            }
            reader.Close();

            foreach (TreeNode node in nodes)
            {
                AddChildren(node, Convert.ToInt32(node.Tag));
            }

            if (parent_node == null)
                this.treeView1.Nodes.AddRange(nodes.ToArray());
            else
                parent_node.Nodes.Add(nodes.ToArray().ToString());
        }

        public void TreeListView()
        {
            AddChildren(null, -1);
        }


Собственно не выводит ошибку, но почему то зацикливается.

Вот БД:
Код

CREATE TABLE `tree` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `parent_id` int(11) default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


INSERT INTO `tree` VALUES (0,'Каталог',0);
INSERT INTO `tree` VALUES (1,'Радел1',0);
INSERT INTO `tree` VALUES (2,'Радел2',0);
INSERT INTO `tree` VALUES (3,'Объект',2);




PM MAIL ICQ   Вверх
Partizan
Дата 12.2.2009, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Дарвин

INSERT INTO `tree` VALUES (0,'Каталог',0);

тут косяк...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Дарвин
Дата 13.2.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



Цитата

INSERT INTO `tree` VALUES (0,'Каталог',0);

тут косяк... 


В чём именно? 
PM MAIL ICQ   Вверх
Partizan
Дата 13.2.2009, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Дарвин, зацикливание...элемент не может быть собственным родителем...

Код

INSERT INTO `tree` VALUES (1,'Каталог',0);
INSERT INTO `tree` VALUES (2,'Радел1',1);
INSERT INTO `tree` VALUES (3,'Радел2',1);
INSERT INTO `tree` VALUES (4,'Объект',2);



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Дарвин
Дата 13.2.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 14.10.2006
Где: Russia, Orenburg

Репутация: нет
Всего: 1



Итак спасибо Partizan'у всё получилось. Вот представляю вам готовое решение. Может кому будет полезно.
Код

public void AddChildren(TreeNode parent_node, int parent_id)
        {
            MySqlCommand command = null;
            if (parent_id == -1)
                command = new MySqlCommand("SELECT * FROM tree WHERE parent_id = 0 ORDER BY id", conn);
            else
                command = new MySqlCommand("SELECT * FROM tree WHERE parent_id = " + parent_id.ToString() + " ORDER BY id", conn);

            MySqlDataReader reader = command.ExecuteReader();
            List<TreeNode> nodes = new List<TreeNode>();
            while (reader.Read())
            {
                TreeNode newNode = new TreeNode();
                newNode.Text = reader["name"].ToString();
                newNode.Tag = reader["id"];
                nodes.Add(newNode);
            }
            reader.Close();

            foreach (TreeNode node in nodes)
            {
                AddChildren(node, Convert.ToInt32(node.Tag));
            }

            if (parent_node == null)
                this.treeView1.Nodes.AddRange(nodes.ToArray());
            else
                parent_node.Nodes.AddRange(nodes.ToArray());
        }

        public void TreeListView()
        {
            AddChildren(null, -1);
        }


И SQL
Код

CREATE TABLE `tree` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `parent_id` int(11) default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

-- ----------------------------
-- Records 
-- ----------------------------
INSERT INTO `tree` VALUES ('1', 'Каталог', '0');
INSERT INTO `tree` VALUES ('2', 'Раздел1', '1');
INSERT INTO `tree` VALUES ('3', 'Раздел2', '1');
INSERT INTO `tree` VALUES ('4', 'Объект1', '3');
INSERT INTO `tree` VALUES ('5', 'Объект2', '3');
INSERT INTO `tree` VALUES ('6', 'Подобъект', '5');


Всем спасибо.



PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0988 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.