|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
простое рекурсивное заполнение дерева |
|
Дата:
|
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 |
|
|
 |
 |
 |
 |
|
|