Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

denuz1

 
Название:

простое рекурсивное заполнение дерева

Дата: 28 December 2005
Описание: простая небольшая функция для рекурсивного заполнения дерева. была создана для вывода дерева категорий. 
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=180]простое рекурсивное заполнение дерева[/CODEPOST]
Оценка: Проголосовало 11 посетителей, средняя оценка 4.45
Оценить:
  1 итак, имеем 2 таблицы в бд (для тестов был взят oscommerce)
  2 categories {
  3   categories_id int PrimaryKey, // id категории
  4   parent_id int                 // ид родительской (верхний уровень - parent_id = 0)
  5 }
  6 categories_description {
  7   categories_id int PrimaryKey
  8   language_id int PrimaryKey
  9   categories_name varchar       // имя категории
 10 }
 11 
 12 // собственно функция
 13 // level - текущая категория, для которой ищутся потомки. last - объект TreeNode для этой категории
 14 
 15      private void GetCategoriesTree(int level, TreeNode last)
 16      {
 17             if (level == 0) 
 18             {
 19                 CategoriesTree.Nodes.Add("0", "Top Level");
 20             }
 21 
 22             TreeNode tn;
 23 
 24             // проверим уровень вложенности - если не верхний, то получим объект TreeNode для текущего уровня
 25             if (last == null)
 26             {
 27                 tn = CategoriesTree.Nodes[(string)level.ToString()];
 28             }
 29             else
 30             {
 31                 tn = last;
 32             }
 33             // запрос по parent_id
 34             DataTable dt = new DataTable();
 35             dt = MySQL.Query("select c.categories_id, cd.categories_name, c.parent_id from categories as c, categories_description as cd where cd.language_id = 1 and cd.categories_id = c.categories_id and c.parent_id = " + level.ToString(), null);
 36             try
 37             {
 38                 foreach (DataRow dr in dt.Rows)
 39                 {
 40                     // имеем объект TreeNode для текущего уровня - добавляем новый узел
 41                     tn.Nodes.Add(dr["categories_id"].ToString(), dr["categories_name"].ToString());
 42                     // рекурсия - вызываем метод для определения потомков у текущего уровня
 43                     GetCategoriesTree((int.Parse(dr["categories_id"].ToString())), tn.Nodes[dr["categories_id"].ToString()]);
 44                 }
 45 
 46             }
 47             catch
 48             {
 49             }
 50         }
 51 
 52 все. :)
Вернуться к списку исходников в категории Winforms
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта