|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - как из TreeView с произвольной глубиной сформировать таблицу |
|
|
.NET - как из TreeView с произвольной глубиной сформировать таблицу
|
Новый участник Сообщения: 16 |
Профиль | Отправить PM | Цитировать Есть TreeView окно, при запуске приложения оно пустое, я набросал код для заполнения parent и child ветвей, глубина может быть произвольной.
Задание: нужно хранить заполненное TreeView в базе данных и при повторном запуске ПО подгружать из БД. Мое решение: в БД одна таблица, формата {ID, parantID, nodeName}. методы для загрузки и выгрузки в/из БД я написал, наверно представляю как из такой таблицы сформировать TreeView. Вопрос: как из TreeView с произвольной глубиной (количеством элементов) сформировать таблицу формата {ID, parantID, nodeName}? |
|
Отправлено: 14:13, 19-12-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Рекурсивно.
|
Отправлено: 14:21, 19-12-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать я догадался, но реализовать это у меня не получается
Вот решение без рекурсии, но глубина обхода ограничена кодом. public class Trees { public Trees() { } public Trees(int NoteID, int ParentNoteID, string NoteName) { this.NoteID = NoteID; this.ParentNoteID = ParentNoteID; this.NoteName = NoteName; } public int NoteID { get; private set; } public string NoteName { get; private set; } public int ParentNoteID { get; private set; } } private void treeNode() { List<Trees> l = new List<Trees>(); foreach (TreeNode childChildNode in treeView1.Nodes) { l.Add(new Trees(1, 0, treeNode.Text)); foreach (TreeNode childChildNode in treeNode.Nodes) { l.Add(new Trees(2, 1, treeNode.Text)); foreach (TreeNode c in childChildNode.Nodes) { l.Add(new Trees(3, 2, treeNode.Text)); //и так далее для обхода в глубину, а глубина должна быть произвольной } } } } |
Последний раз редактировалось Drongo, 19-12-2013 в 20:49. Отправлено: 14:28, 19-12-2013 | #3 |
Необычный Сообщения: 4462
|
Профиль | Сайт | Отправить PM | Цитировать nastr, а тут не телепаты, чтобы ваш код знать
|
------- Отправлено: 14:44, 19-12-2013 | #4 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать ...
|
|
Последний раз редактировалось nastr, 19-12-2013 в 23:31. Отправлено: 20:34, 19-12-2013 | #5 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Следующий код:
public class Trees { public Trees() { } public Trees(int NoteID, int ParentNoteID, string NoteName) { this.NoteID = NoteID; this.ParentNoteID = ParentNoteID; this.NoteName = NoteName; } public int NoteID { get; private set; } public int ParentNoteID { get; private set; } public string NoteName { get; private set; } } private void saveButton_Click(object sender, EventArgs e) { int processed = 0; bool root = true; saveTreeNode(treeView1.Nodes, 0, ref processed, ref root); string str = String.Empty; foreach (Trees t in l) str += "\t" + t.NoteID + "\t" + t.ParentNoteID + "\t" + t.NoteName + Environment.NewLine; MessageBox.Show(str); str = String.Empty; l.Clear(); } List<Trees> l = new List<Trees>(); private void saveTreeNode(TreeNodeCollection nodes, int NoteID, ref int processed, ref bool root) { foreach (TreeNode node in nodes) { int ParentNoteID; if (root) { ParentNoteID = -1; root = false; } else ParentNoteID = NoteID - 1; l.Add(new Trees(NoteID, ParentNoteID, node.Text)); ++processed; saveTreeNode(node.Nodes, NoteID + 1, ref processed, ref root); root = true; NoteID = processed; } } Но в случае не линейного дерева получается совсем не то что хотелось бы: |
Последний раз редактировалось nastr, 19-12-2013 в 23:30. Причина: опечатка Отправлено: 23:29, 19-12-2013 | #6 |
Необычный Сообщения: 4462
|
Профиль | Сайт | Отправить PM | Цитировать nastr, Насколько я понимаю древовидное описание, на основе {ID, parentID, NodeName}, не в первом, не во втором случае ответ не правильный.
Попробовал вчитаться в процедуру -- не понял. Кто кому родитель и кто кому ребенок. Причем желательно в обе стороны, и желательно руками. Структура -> Дерево. Дерево -> Структура. |
------- Отправлено: 09:18, 20-12-2013 | #7 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Вот структура дерева
|
Отправлено: 13:16, 20-12-2013 | #8 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать возможно я изначально, концептуально не верно подошел к решению вопроса, возможно есть какой-то другой способ записать TreeView в БД, и потом загрузить из БД, нежели рекурсивный перебор всех ветвей для формирования таблицы и т.д.
В любом случае всем спасибо за помощь! |
Отправлено: 13:50, 20-12-2013 | #9 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать nastr, используй глобальный счётчик для создания новой ветки, сделай что-то вроде рекурсивного перебора всех веток
Так бы оно могло выглядеть на js: var __id=0; function genId() { return ++__id; } function walk(root_id, root, text) { var kid_id=genId(); WScript.Echo("INSERT INTO TAB1 (PARENT_ID, ID, TEXT) VALUES("+root_id+", "+kid_id+", '"+text+"');"); for(var i in root) { walk(kid_id, root[i], i); } } data={ floor1:{John:true, Marie:true}, floor2:{maniac:true}, floor3:{doctor:true, policeman:true} }; walk("NULL", data, "thriller-house"); |
Последний раз редактировалось pva, 20-12-2013 в 16:27. Отправлено: 16:21, 20-12-2013 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сделать таблицу с линиями из текста | enikei | Хочу все знать | 3 | 17-11-2010 16:40 | |
[решено] из файла Word получаем сразу таблицу в HTML... | serj88rus | Вебмастеру | 2 | 05-07-2010 12:09 | |
Выборочная загрузка и выгрузка данных из формы в таблицу MySQL | dima1981 | Вебмастеру | 8 | 25-08-2008 18:02 | |
[решено] загрузка данных из html форм в таблицу баз mysql | dima1981 | Вебмастеру | 5 | 16-08-2008 01:34 |
|