Комплексная фильтрация в веб-приложении

Мне нужно оценить (и, возможно, построить позже) сложный фильтр в приложении ASP.NET WebForms. Фильтр должен быть в основном основан на ASP.NET AJAX или jQuery для высокой интерактивности. Фильтр должен позволять фильтровать данные со сложными логическими условиями (и / или фигурными скобками) и несколькими операторами. Пользователь должен иметь возможность сохранить запрос фильтра и использовать его (загрузить) позже (логика сервера). Более того, до сих пор идет обсуждение оператора in.

Приложение должно иметь графический редактор фильтров. Я хочу иметь полный контроль над набором операндов (полей фильтрации) и операторов. Компонент будет использоваться для всех действий фильтрации в приложении. Моя проблема только в том, как сделать часть пользовательского интерфейса - перевод встроенной «структуры запроса» не является проблемой.

Вы когда-нибудь делали что-то подобное? Не могли бы вы поделиться опытом, как лучше и быстрее всего создать такой компонент? Нужно ли мне разрабатывать компонент или есть какой-либо существующий, который имеет хотя бы часть функциональности и может быть расширен для предоставления других функций? Поскольку я не очень разбираюсь в разработке на стороне клиента, я не знаю, насколько сложной задачей является разработка такого компонента с нуля.

Другая возможность - определить некоторый язык мета-запросов и позволить пользователям писать запрос в текстовое поле запроса с поддержкой построения логических выражений.

Я уже проверил доступные элементы управления в инструментах DevExpress и Telerik:

DevExpress:

  • Плюсы: Очень хорошая визуализация, быстрая. Наверное, у нас есть лицензии DevExpress.
  • Минусы: тесно связаны с сеткой DevExpress. На основе документации нет расширяемости и нет контроля над операндами и операторами. Он использует операнды, представленные в виде столбцов для сетки - мне нужно гораздо больше. Наверное, нет возможности сохранять и загружать фильтры.

Telerik:

  • Плюсы: Без сетки, выглядит как отдельный элемент управления.
  • Минусы: я не нашел документации - я не уверен в расширяемости, но код выглядит так, как будто он использует некоторый элемент управления привязкой данных в качестве источника операндов = проблема. Мне не нравится визуализация. Демо действительно медленное. У нас нет лицензий Telerik.

person Ladislav Mrnka    schedule 18.09.2010    source источник


Ответы (3)


Самая важная вещь, которую я бы посоветовал: держите пользовательский интерфейс вашего конструктора запросов отдельно от любой используемой вами сетки. Когда у вас есть тесная связь, это заставляет вас принимать дизайнерские и технические решения, о которых вы можете позже пожалеть. DevExpress, как правило, вносит несколько критических изменений каждые пару выпусков, и это может вынудить вас постоянно реорганизовывать свой код. У них также есть некоторые необычно уникальные способы делать что-то, что может означать, что вы в конечном итоге кодируете хаки для достижения того, чего хотите.

Если вы сохраняете свой пользовательский интерфейс очень слабо связанным, вы можете построить его любым удобным для вас способом, затем принять ввод пользователя и создать из него фильтры сетки, а затем добавить эти фильтры в сетку. Это также означает, что если вы решите поменять местами сетки позже, вам нужно будет изменить только минимум кода (этот подход также помогает, если вы решите опробовать компоненты и вам нужно запустить как можно более похожий код для обеих сеток).

Личный комментарий - после тщательной фильтрации с обоими этими наборами компонентов я скажу одно: мы перешли на Telerik не просто так. На самом деле причин много. И мы не оглядывались назад с сожалением. Также ребята из Telerik очень хорошо помогают расширять и делать забавные вещи с помощью своих элементов управления, в то время как ребята из DevExpress, как правило, занимают позицию «зачем вам расширять наши элементы управления? Разве они уже не совершенны? Мы все выигрываем. в конце концов, конкурсы популярности на конференциях разработчиков. ". Вам действительно нужно провести испытание между ними, прежде чем вы выберете одно или другое. Удачи :)

person slugster    schedule 18.09.2010

Мы используем Telerik RadControls в течение некоторого времени, и я могу сказать, что мы довольны функциональностью, которую они предлагают.

Мы также экспериментировали с RadFilter, который является относительно новым элементом управления в пакете. Документацию можно найти здесь: http://www.telerik.com/help/aspnet-ajax/filter-overview.html

Вот несколько причин, по которым мы включаем RadFilter в наши приложения: - его можно использовать с другими элементами управления - однако вам необходимо явно определить поля, за исключением случаев использования RadGrid и RadListView - он, похоже, не тесно связан с каким-либо другим элементом управления (учитывая примечание выше) - он может сохранять / загружать выражения - он позволяет вам писать собственный sql для выражений сборки - самая крутая функция - фильтрация непосредственно в элементах управления источниками данных - мы часто используем ее в последнее время (есть демонстрация на их сайте )

«Демонстрация действительно медленная» - она ​​может быть медленной из-за запросов AJAX, выполняемых после каждого изменения настроек. Фильтр DevEx (http://demos.devexpress.com/ASPxGridViewDemos/Filtering/FilterBuilder.aspx) работает точно так же.

person J.R.    schedule 21.09.2010
comment
Спасибо. Это выглядит хорошо. Пример показывает ручное определение полей, что является моим самым важным требованием. - person Ladislav Mrnka; 21.09.2010

Позвольте мне ответить вам от имени службы поддержки DevExpress. Действительно, мы часто спрашиваем наших клиентов, почему они хотят делать то или иное с нашими средствами управления. Вы можете подумать, что это способ замедлить процесс решения проблемы. Однако, с моей точки зрения, это самый быстрый способ решить проблему. Сидя рядом с нашими разработчиками и целыми днями работая с нашими элементами управления, мы обычно знаем об элементах управления такие вещи, которые известны любому человеку в мире. Так что нередко мы предлагаем совершенно иное решение по сравнению с исходной задачей, которое работает лучше и надежнее.

Я могу только подтвердить, что лучшее решение - это попробовать два разных набора элементов управления, проверить, какой из них лучше соответствует вашим требованиям, и, наконец, сделать выбор.

Удачи :)

person DevExpress Team    schedule 20.09.2010
comment
Спасибо. Могу ли я определить свой собственный набор полей фильтрации в фильтре DevExpress? Мне нужны поля из объединенных записей, которые не являются частью результата, переданного в сетку. Также можно ли сохранить и загрузить выражение фильтра? - person Ladislav Mrnka; 21.09.2010
comment
Привет, Ладислав, Да, это возможно. Это можно сделать с помощью события HeaderFilterFillItems в ASPxGridView, описанного в документации. а> - person DevExpress Team; 21.09.2010