|
Компьютерный форум 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 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать nastr,
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; } } int ParentNoteID; if (root) { ParentNoteID = -1; root = false; } else ParentNoteID = NoteID - 1; .... root = true; NoteID = processed; поэтому NodeID = processed; мне не понятна. Попробуйте для начала просто рекурсивную распечатку директорий сделать. Желательно с трассировкой. |
------- Отправлено: 16:43, 20-12-2013 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
|
|
Отправлено: 22:15, 20-12-2013 | #12 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать nastr,
Цитата nastr:
Это вызывает путаницу и лишнее усложнение кода, как для проверки, так и для понимания. NodeID - должная вообще генерироваться автоматически, в процедуре записи дерева. ---- Шаг назад. Процедура рекурсивного обхода дерева, и процедура записи дерева в линейную структуру -- это две отдельные процедуры! Причем NodeID, как ключевое(уникальное) значение таблицы, должен считаться в процедуре записи |
|
------- Отправлено: 11:56, 21-12-2013 | #13 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать The main question how to fully traverse/circumvent through all TreeView, for transforming Tree structure into a Table structure.
I want to note that the TreeView may contain a different number of branches, with different depths and different names. I found a lot of information how to populate TreeView e.g. from DataTable, but I didn’t found information how to recursively traverse/circumvent a TreeView and populate/fill data e.g. to DataTable. As sample I have following TreeView: Aaron -Baldwin --Caleb ---Dale --Earl -Fabian Gabriel -Harold -Ian Necessary to convert the TreeView into e.g. DataTable: id | Name | ParentId -------------------------------- 1 | Aaron | null 2 | Baldwin | 1 3 | Caleb | 2 4 | Dale | 3 5 | Earl | 2 6 | Fabian | 1 7 | Gabriel | null 8 | Harold | 7 9 | Ian | 7 |
Отправлено: 21:34, 08-02-2014 | #14 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать First of all i want tot thank you for your help, but similar code i already wrote by myself. Following code is work well:
private void buttonSave_Click(object sender, EventArgs e) { TraverseTreeView(treeView1); string temp = String.Empty; foreach (string str in name) temp += str + Environment.NewLine; MessageBox.Show(temp); name.Clear(); } List<string> name = new List<string>(); private void TraverseTreeView(TreeView tview) { TreeNode temp = new TreeNode(); for (int k = 0; k < tview.Nodes.Count; k++) { temp = tview.Nodes[k]; name.Add(k+"\t"+temp.Text+"\tnull"); for (int i = 0; i < temp.Nodes.Count; i++) visitChildNodes(temp.Nodes[i]); } } private void visitChildNodes(TreeNode node) { name.Add(node.Text); for (int j = 0; j < node.Nodes.Count; j++) visitChildNodes(node.Nodes[j]); } 1. Do not use global variable (List<string> name) for collecting result; 2. Correctly collect data perhaps in DataTable, in format "1 | Aaron | null". Please chech code below, and fix mistaks: private void buttonSave_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); dt = TraverseTreeView(treeView1); string temp = String.Empty; foreach (string str in dt) temp += str + Environment.NewLine; MessageBox.Show(temp); dt.Clear(); } //List<string> name = new List<string>(); private DataTable TraverseTreeView(TreeView tview) { DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(int)); dt.Columns.Add("Name"); dt.Columns.Add("ParentId", typeof(int)); TreeNode temp = new TreeNode(); for (int k = 0; k < tview.Nodes.Count; k++) { temp = tview.Nodes[k]; dt.Rows.Add(k, temp.Text, null); //name.Add(temp.Text); for (int i = 0; i < temp.Nodes.Counst; i++) dt.Rows.Add(i, visitChildNodes(temp.Nodes[i]).Text, i - 1); } return dt; } private DataTable visitChildNodes(TreeNode node) { //name.Add(node.Text); DataTable dt = new DataTable(); dt.Columns.Add("id", typeof(int)); dt.Columns.Add("Name"); dt.Columns.Add("ParentId", typeof(int)); for(int j = 0; j < node.Nodes.Count; j++) dt.Rows.Add(j, visitChildNodes(node.Nodes[j]).Text, j - 1); return dt; } |
Отправлено: 00:12, 12-02-2014 | #15 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Сделать таблицу с линиями из текста | 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 |
|