|
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
|
||||||
Выборка из MSSQLServer значений в treeView02.06.2017, 16:15. Показов 1911. Ответов 15
Метки нет (Все метки)
Доброго дня.
Туплю, прошу помощи. Имеется БД ID int Unchecked title varchar(255) Unchecked parentID int Checked Есть код
Прошу подмочь в решении
0
|
||||||
| 02.06.2017, 16:15 | |
|
Ответы с готовыми решениями:
15
Сравнение значений между собой в порядке даты и выборка отрицательных значений разницы Выборка финальных значений в промежутке и нахождение несуществующих значений Дана выборка из 10 значений. Расширить ее до 100 значений. |
|
36 / 34 / 20
Регистрация: 17.03.2015
Сообщений: 175
|
||||||
| 02.06.2017, 16:37 | ||||||
|
Добрый день.
Была подобная задача, только нужно было вывести значения столбца в ComboBox.
0
|
||||||
|
Администратор
|
||||||
| 02.06.2017, 17:19 | ||||||
|
GuardianCoder, метод GetSchemaTable() возвращает DataTable описывающий схему данных - колонки, их типы и другие метаданные. Самих данных там нет. Нужно сделать так:
0
|
||||||
|
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
|
||
| 02.06.2017, 17:35 [ТС] | ||
|
А как вывести в форме дерева?
0
|
||
|
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
|
|
| 07.06.2017, 11:33 [ТС] | |
|
UP АП! Актуально...
0
|
|
|
|
||||||||||||||||||||||
| 07.06.2017, 12:33 | ||||||||||||||||||||||
Сообщение было отмечено GuardianCoder как решение
РешениеКликните здесь для просмотра всего текста
Репозиторий загружает таблицу Table. Connection String берется из App.config. 2) Далее создаем класс TreeNode который будет оберткой вокруг DataRow, отображающий плоскую таблицу в виде дерева: Кликните здесь для просмотра всего текста
3) Затем, используя FastTree, будем отображать дерево в главной форме: Кликните здесь для просмотра всего текста
4) Ну и создаем простенький редактор записей: Кликните здесь для просмотра всего текста
Результат:
3
|
||||||||||||||||||||||
|
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
|
|
| 07.06.2017, 12:39 [ТС] | |
|
0
|
|
|
|
||||||
| 07.06.2017, 12:49 | ||||||
|
Или так:
0
|
||||||
|
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
|
|
| 07.06.2017, 18:14 [ТС] | |
|
Всем спасибо!
0
|
|
|
|
|
| 07.06.2017, 19:16 | |
|
Несмотря на то, что автор топика выбрал вариант из поста #6, я хотел бы дать некоторые пояснения для тех, кто будет читать эту ветку позже. Вариант кода, приведенный HF (пост #8) также является рабочим. Он выгладит проще и поэтому я хотел бы пояснить чем мой вариант #6 лучше (хотя и выглядит немного сложнее).
Концептуальная разница в подходах поста #6 и #8 заключается в том, что в #6 строится модель дерева, а в #8 - модели дерева нет. Оба варианта опираются на DataTable как источник данных. Однако, поскольку структура данных древовидная, то для обработки данных (а она же тоже нужна, помимо того, что бы просто отобразить дерево) нужна также древовидная модель. Поэтому я строю обертку TreeNode, которая содержит DataRow, но при этом, с TreeNode можно работать как с деревом - каждый TreeNode содержит своих детей, дети содержат своих детей и так далее. Таким образом мы можем работать с нашими данными как с деревом. Вариант #8 нацелен только на отображение, и работать с данными как с деревом он не позволяет (вариант использования TreeView как источник данных - не рассматриваем, как несерьезный). Кроме основного различия, есть еще технические различия: 1) Вариант #8 предполагает, что вершина-предок в таблице всегда расположен ДО вершины-потомка. Таким образом, если таблицу отсортировать например по полю Title, то вариант #8 перестает работать. Вариант #6 работает в любом случае, независимо от последовательности строк в таблице. 2) Вариант #8 опирается на фиксированные поля: Id, parentId, title. Вариант же #6 может работать с произвольными таблицами и именами полей. Имена необходимых полей и сама таблица - передается в конструктор корневого объекта TreeNode. 3) Вариант #8 имеет сложность построения дерева O(n^2) (перебираются все строки из DataRow и для каждой из них снова перебираются все вершины для поиска предка). Вариант же #6 имеет сложность O(n) поскольку не перебирает все вершины для поиска предка, а строит дерево лениво - по мере открытия вершин пользователем. Таким образом, если у нас в таблице миллион значений, то вариант #8 становится неработоспособным, потому что сложность построения дерева будет порядка 10^12 операций. Вариант же #6 построит дерево без проблем (10^6 операций). 4) Вариант #8 использует стандартный TreeNode который является довольно тяжелым контролом: медленным и жрущим много памяти. В противовес, вариант #6 использует контрол FastTree который работает исключительно в виртуальном режиме и следовательно не потребляет дополнительной памяти. Кроме того, он заточен под большие объемы данных. 5) Допустим, наше дерево поменялось - например мы изменили поле parentId одной из вершин. Для того, чтобы отобразить измененное дерево, вариант #8 требует полной перестройки - очистки TreeView и построения всех вершин заново (а это занимает O(n^2), как мы помним). Вариант же #6 работает в виртуальном режиме и перестройка не требуется, изменения будут отображены автоматически. 6) Модель дерева построенная в #6 может применяться в нескольких контролах, на нескольких формах. Вариант же #8 работает только для одного TreeView. Если нужно отобразить дерево на другой форме - нужно будет строить дерево заново.
2
|
|
|
|
|||
| 07.06.2017, 19:42 | |||
|
Вроде и не обидно, но хочется ответить
![]() Вариант #8 строился на задаче - 1) новичок программист; 2) есть таблица (3 колонки); 3) требуется построить TreeView. - Вариант #6 настолько большой, что мне пришлось несколько раз его пробежать туда-сюда, чтобы понять что он делает и может делать. А новичок программист которому нужно чтобы работало потом ещё задаст 10 вопросов из-за того что даже не поймёт куда это всё нужно написать и почему это не работает. Т.е. ответ который тянет за собой ещё 10 вопросов. Да вы ещё и усугубили его EditForm. Да и не поймёт начинающий программист обилию продвинутого кода. - FastTree, что не стандартный контрол. Если ТС нужно решить задачу для преподавателя, то он не будет ему сдавать с использованием сторонних библиотек. - Ну и про универсальность #8 конечно я даже не спорю. В #6 и FastTree полно возможностей по работе с изменением источника или перемещением нод. Что уж тут сравнивать. Но! при желании, я могу тоже добавить функционала и "брюки превратятся... превратятся в элегантные шорты". И ведь это не сложно. Задачи только не стояло. Например
0
|
|||
|
|
||||||||||
| 07.06.2017, 21:01 | ||||||||||
![]() Я как раз и написал разъяснение, что ваш вариант тоже является рабочим. И для новичка более простым и понятным. И наверно более приемлемым. Но при построении более сложного ПО, такой вариант уже не годится, на мой взгляд. это делать И в модели И в treeview. В моем же случае - только в модели, а дерево перестроится само. А это очень напрягает, когда нужно следить и за моделью данных и за контролами и постоянно их синхронизировать. Такой код со временем занимает большую половину всего кода вообще, тяжел в поддержке, полон багов. Во-первых, контрол, который не поддерживает ни binding ни виртуальный режим для меня не существует. Stateful контрол это антипаттерн в чистом виде. Во-вторых, TreeView очень тормозной. Для отображения большого дерева непригоден. Вот накатал простенький тест: Создается дерево из миллиона вершин (на первом уровне 1000, и у каждой еще 1000 детей): Кликните здесь для просмотра всего текста
TreeView отображает это 22 секунды, а FastTree - 19 миллисекунд! Разница на три порядка. При чем чем больше размер дерева, тем дольше TreeView будет его строить. А скорость построения FastTree не очень сильно зависит от размера дерева. Кроме того, если посмотреть на расход памяти, то FastTree практически не использует память (как и любой контрол в виртуальном режиме), а TreeView подгребает под себя 300 МБ памяти! Помимо этого, TreeView содержит много неудобств: не поддерживает мультиселект, не поддерживает стили каждой вершины по отдельности (цвет, размер, бекграунд и т.д.), не поддерживает drag&drop вершин в нормальном виде, теряет визуальное выделение при потере фокуса, не имеет события при потере выделения вершины. Все это есть в FastTree.
2
|
||||||||||
|
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
|
|||
| 08.06.2017, 12:46 [ТС] | |||
. Минут за 20 разобрался. Имхо, до этого кодил на ++, потому, немного понимаю архитектуру. И да, это не задача для преподавателя, а попытка собственной разработки. Осталось только понять принцип добавления новых нодов, как головных, так и дочерних. Добавлено через 38 минут Добавлено через 8 минут скачан FastTree был, соответственно, отсюда
0
|
|||
|
|
||
| 08.06.2017, 12:46 | ||
|
В FastTree линий тоже нет.
1
|
||
|
2 / 2 / 2
Регистрация: 02.06.2017
Сообщений: 63
|
|
| 08.06.2017, 12:48 [ТС] | |
|
0
|
|
| 08.06.2017, 12:48 | |
|
Помогаю со студенческими работами здесь
16
Выборка значений value Выборка значений Выборка значений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|