![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
valzy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
Собственно, нужно чтобы при добавлении ноды в TreeView обновлялся документ XML.
TreeView связан с XML документом таким образом, что TreeView строится из XML-документа. Соответственно при добавлении в TreeView документ XML должен обновляться. Строить XML на основе TreeView это плохое решение. Кто-нибудь знает конкретные методы решения подобной проблемы? Напишите, плиз, буду очень благодарен. |
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
Сделать свой контрол на основе TreeView, в котором синхронизировать обновление
|
|||
|
||||
valzy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
С чего нужно примерно начать и как синхронизировать? Понятия "Абсолютного индекса" для TreeView здесь уже нет. Я на dotnet недавно, нужна помощь... |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
А можно небольшое уточнение? Почему
ИМХО: оно самое лучшее. Вопрос в том, как оно будет реализовано. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
valzy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
нужно чтобы дерево вида
+<object> | |---+<table> | |---+ATTRIBUTE: width | | |---VALUE: 100 | | | |---+ATTRIBUTE: height | | |---VALUE: 70 | | | |---+<object> | |---+<cabinet> | |---+ATTRIBUTE: count | |---VALUE: 3 | |---+<table> |---+ATTRIBUTE: width |---VALUE: 120 было сгенерировано в xml вида <object> <table width="100" height="70"> <object> <cabinet count="3"/> </object> </table> <table width="120" /> </object> Это сообщение отредактировал(а) valzy - 21.11.2008, 09:41 |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Да всё очень просто: как сам TreeView так и его TreeNode'ы могут быть унаследованы. Создай несколько своих нодов, ну например нод, который будет сохраняться как элемент, и нод, который будет сохраняться как атрибут для остальных типов узлов можно сделать то же самое, кроме того, каждому можно добавить методы и свойства, благодаря которым каждый узел будет правильно генерировать узел документа.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
valzy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
Оригинально ![]() Примерно я понял, если бы можно было бы, хотелось бы увидеть простенький пример, я недавно с dotNet-ом работаю... |
|||
|
||||
shmarov |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 15.6.2007 Где: 1001101 region Репутация: нет Всего: 1 |
к примеру - ноды наследовать вот так:
ну а дальше - наследуй TreeView и в методах изменения ноды генери свой XML Как вариант - я расширял TreeView свойством DataSource, в котором в нужной мне форме хранил данные и разбирал их соответственно. А у DataSet, который можно указать в качестве значения для DataSource-a, есть метод сохранения XML. Вопрос только подойдёт ли тебе такой подход по структуре получаемого файла. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Ну, вообще-то можно всё сделать более удобным. Просто я уже почти сделал и тут у меня свет вырубило, а сохранить не успел, так что: если потерпишь малость то сделаю потом примерчик(если, конечно вопрос ещё актуален).
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
valzy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
Благодарю! Не код, а произведение искусства!
|
|||
|
||||
valzy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
А если XML-ка содержит контент, ну т.е. текст:
<object> <content>Столы<br />Шкафчики <table width="100" height="70"> <object> <cabinet count="3"/> </object> </table> <table width="120" /> </content> </object> то как с этим текстом поступить? я просто проверял тип ноды на соответствие XmlNodeType.Text. Если по сорцам diadiavova смотреть, то вот так я изменил (изменения кода см. в блоке комментариев //---):
Это сообщение отредактировал(а) valzy - 25.11.2008, 11:52 |
|||
|
||||
diadiavova |
|
||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Обрати внимание на то, что некоторые коды я в своём примере не использовал вообще(хотя сам же и написал их). Например: создал абстрактный класс для всех узлов, в нём есть свойство, показывающее тип узла, которое я ни разу не использовал. Всё это делалось для того, чтобы модель можно было расширить при необходимости. Если тебе нужно включить в модель текстовый блок, блок CDATA, инструкцию приложения, или к примеру элемент, который должен вести себя по-другому - всё это можно организовать путём наследования от абстрактного класса XmlTreeNode.
Естественно: Некоторых изменений это потребует и в существующих классах, но они незначительны. Вот так примерно должен выглядеть текстовый узел
Естественно, что он будет отображать - решать тебе, в таком виде в дереве просто будет написано #text, нужно что-то другое - пропиши это в конструкторе. Кроме того, в конструкторе ElementNode надо указать, что если узел документа является текстовым, то надо формировать соответствующий элемент.
Примерно так. Код не проверял, но если идея ясна, то возможные ошибки исправишь сам. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
||||
|
|||||
valzy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 6.3.2008 Репутация: нет Всего: нет |
![]() Это сообщение отредактировал(а) valzy - 27.11.2008, 08:06 |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |