Древовидные структуры
От: Pharaoh  
Дата: 29.02.08 14:36
Оценка:
Введение: жил я раньше убого и всю работу делал в кодбихайнде, но потом дошло, как прекрасна система работы с данными в .NET, стал работать с источниками данных, радовался долго, но сейчас уткнулся носом в проблемму.

Не уж то в дотнете нет источника данных для работы с древовидными структурам?

Сразу напрашивается "как же нет, есть — вон они и xmldatasource и сайтмап и даже абстрактный HierarchicalDataSourceControl". Однако проанализировав это все, особенно последний, я ршения не нашел.
Все на что они способны: организовать навигацию и отредактировать xml'ку. А как реализовать банальный каталог товаров? Напрашивается опять ответ HierarchicalDataSourceControl. НО как не искал не нашел в нем способа редактирования данных. Все, что нашел это.

Задача то банальна: без кодбихайнда отредактировать древовидную структуру — на каждом втором проекте встает сей вопрос. Я уже смирился с судьбой писать этот датасурс, но и это не помогло — не хватает редактирования (или моего понимания этого редактирования) чтобы полностью инкапсулироваться за датасурс.

По сему два философских вопроса к сообществу:
1) Есть ли придусмотренный микрософтом способ управления древовидными структурами? кроме xml.
2) Как вы подходите к этой задаче?

И один практический:
Мой реализованный датасурс соглашается биндить только ToString() объектов, а как сделать чтобы биндились паблик свойства?
Объект:
public class HPage : IHierarchyData
    {
        
        public Guid Id;
        public Guid Parent;
        public string Title;
        public Guid Master;
        public int Priority;
        private string path;
        ...
        public object Item
        {
            get { return this; }
        }
        public override string ToString()
        {
            return this.Title;
        }
    }

байндю в тривью так:
<asp:TreeNodeBinding DataMember="efe.HPage" ValueField="Priority" />
или так:
<asp:TreeNodeBinding DataMember="efe.HPage" ValueField="Id" />
одна и та же ошибка:
Could not bind to the 'Priority' property (specified by ValueField) while data binding TreeView. Please check the Bindings fields.

У меня есть предположение, что возможно чтобы обьект стал данными надо или интерфейс какой-то описать или как то выделить свойства — данные, но как?
Re: Древовидные структуры
От: Lao Украина  
Дата: 29.02.08 16:07
Оценка: 8 (2) +1
Здравствуйте, Pharaoh, Вы писали:

P>И один практический:

P>Мой реализованный датасурс соглашается биндить только ToString() объектов, а как сделать чтобы биндились паблик свойства?
P>Объект:
P>байндю в тривью так:
P> <asp:TreeNodeBinding DataMember="efe.HPage" ValueField="Priority" />
P>или так:
P> <asp:TreeNodeBinding DataMember="efe.HPage" ValueField="Id" />
P>одна и та же ошибка:
P>Could not bind to the 'Priority' property (specified by ValueField) while data binding TreeView. Please check the Bindings fields.

P>У меня есть предположение, что возможно чтобы обьект стал данными надо или интерфейс какой-то описать или как то выделить свойства — данные, но как?


Не пробовали добавить к классу не просто public поля, а именно свойства, и их биндить?
т.е. сделать где-то так
public int Priority
{
    get{return _priority;}
    set{_priority=value;}
}


P.S.
с деревом не работал
Re[2]: Древовидные структуры
От: Pharaoh  
Дата: 29.02.08 16:32
Оценка:
Здравствуйте, Lao, Вы писали:

Lao>Не пробовали добавить к классу не просто public поля, а именно свойства, и их биндить?

Lao>т.е. сделать где-то так
Lao>
Lao>public int Priority
Lao>{
Lao>    get{return _priority;}
Lao>    set{_priority=value;}
Lao>}
Lao>

Lao>P.S.
Lao>с деревом не работал

Не успел, поскольку сроки поджимают, забил на инкапсуляцию и делаю все в событиях treeview, как старый дельфятник :- \ ибо даже решение этой проблемы не спасло бы от танцев с бубном для редактирования.

За совет спасибо, как встанет подобная задача — попробую а некоторые документы говорят, что она встанет довольно скоро.
Re[3]: Древовидные структуры
От: B0rG  
Дата: 29.02.08 16:54
Оценка:
Здравствуйте, Pharaoh, Вы писали:

P>Не успел, поскольку сроки поджимают, забил на инкапсуляцию и делаю все в событиях treeview, как старый дельфятник :- \ ибо даже решение этой проблемы не спасло бы от танцев с бубном для редактирования.


P>За совет спасибо, как встанет подобная задача — попробую а некоторые документы говорят, что она встанет довольно скоро.


Lao прав. Биндинг в основном работает на GetProperies(), а не GetMembers(), по сему надо делать public properties.
Re[4]: Древовидные структуры
От: Pharaoh  
Дата: 29.02.08 17:32
Оценка:
Здравствуйте, B0rG, Вы писали:

BG>Lao прав. Биндинг в основном работает на GetProperies(), а не GetMembers(), по сему надо делать public properties.


Только что опробовал. Действительно.
Жаль, капля уважения упала с моего стакана почтения микрософта — я думал они навсегда стерли разницу между свойством и полем оказалось — нет. Спасибо, я не знал, что поля НЕ конвертируются в свойства, почитал, узнал.

зы: Всегда не любил делать локальные поля только для глобального свойства, если никакой обработки не происходит.
Re[5]: Древовидные структуры
От: B0rG  
Дата: 29.02.08 19:34
Оценка:
Здравствуйте, Pharaoh, Вы писали:

P>Только что опробовал. Действительно.

P>Жаль, капля уважения упала с моего стакана почтения микрософта — я думал они навсегда стерли разницу между свойством и полем оказалось — нет. Спасибо, я не знал, что поля НЕ конвертируются в свойства, почитал, узнал.

P>зы: Всегда не любил делать локальные поля только для глобального свойства, если никакой обработки не происходит.


На мой взгляд в этом есть определенная сермяжность Бо филды, все таки филды, а проперти уже совсем другой разговор. Просто идеология такая, и они ее кстати во многих вещах придержиются. В любом датабиндинге будет такая же ситуация.
Re[5]: Древовидные структуры
От: Gollum Россия  
Дата: 03.03.08 10:13
Оценка:
Здравствуйте, Pharaoh, Вы писали:

P>я думал они навсегда стерли разницу между свойством и полем оказалось — нет.

И слава богу что нет
Ежели череп прогрызла мышь — время забыть о былом
Eugene Agafonov on the .NET

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.