Cryogen2003 Цитата: сейчас работает практически идеально, ну акромя
акромя того, что не даёт правильного результата, и мы не знаем, как этого результата добиться. У нас с вами разные представления об практической идеальности
.
имхо:
Oracle хорошо работает с древовидными структурами. Храня фильтр в таблице, в виде набора записей (одно примитивное условие на запись), фильтр легко отдавать запросом из БД клиенту в любом красивом виде: хоть в виде текста с нужными отступами, хоть в формате HTML или XML, с дальнейшей доработкой.
Если использовать DBTreeList:
- не нужно курочить исходники TcxDBFilterControl, при выходе новой версии DevExpressа не нужно их перекурочивать, и при выходе очередной версии DevExpressа внезапно обнаружить, что теперь проще сделать что-то своё, чем разбираться с самого начала с их компонентом (я с этим уже сталкивался)
- функциональность DBTreeList описана в официальной документации - если будут что-то менять, то должны будут описать, как пользоваться изменениями
- неизвестно, как заказчик захочет доработать эту систему фильтров. С простой древовидной структурой, которой вы можете распоряжаться, как хотите, вы можете делать, что хотите: добавить большое количество полей разного типа и т.п. С существующим TcxDBFilterControl это сделать сложнее: нужно менять вычисления размеров полос прокрутки, отрисовку на канве и т.п.
- алгоритм вычисления веса - это алгоритм обхода дерева фильтра. Если использовать TcxDBFilterControl, то сначала нужно написать парсер текста фильтра, который построит дерево и определит тип полей. Если в БД уже хранится это дерево в удобном виде, то парсер писать не нужно.
В общем, я о том, что используя DBTreeList, уже сейчас можно оценить объём работ для решения задачи. И объём работ для развития этого проекта. Может быть, он будет не так красиво выглядеть, как TcxDBFilterControl, но он будет давать нужный результат.
Используя TcxDBFilterControl, мы в данное время не знаем, что нужно делать, и сколько времени на это уйдёт, и сколько это будет стоить. Дать ответы на эти вопросы можно только после тщательного изучения исходников компонентов фильтра.