void OnCustomBuildCriteria(object sender, CustomBuildCriteriaEventArgs customBuildCriteriaEventArgs) { if (View != null && ((IModelListViewDisableFullTextForMemoFields)View.Model).DisableFullTextForMemoFields) { var filterController = Frame.GetController <FilterController>(); var members = removeUnlimitedSizeMembers(filterController.GetFullTextSearchProperties(), View.ObjectTypeInfo); customBuildCriteriaEventArgs.Criteria = new SearchCriteriaBuilder( View.ObjectTypeInfo, members, customBuildCriteriaEventArgs.SearchText, GroupOperatorType.Or, false).BuildCriteria(); customBuildCriteriaEventArgs.Handled = true; } }
void filterController_CustomBuildCriteria(object sender, CustomBuildCriteriaEventArgs e) { var filter = sender as FilterController; if (string.IsNullOrEmpty(e.SearchText)) { e.Criteria = CriteriaOperator.Parse("1=0"); e.Handled = true; return; } string normalizedText = e.SearchText.ToUpper(); if (View.Id == "MKB10_LookupListView") { var criteria = CriteriaOperator.Or( CriteriaOperator.Parse("Iif(MKB is null, false, Contains(Upper(MKB),?))", normalizedText), CriteriaOperator.Parse("Contains(Upper(NAME), ?)", normalizedText) ); e.Criteria = criteria; e.Handled = true; return; } if (View.Id == "Kladr_LookupListView") { var criteria = CriteriaOperator.Or( CriteriaOperator.Parse("Contains(Upper(Name), ?)", normalizedText) ); e.Criteria = criteria; e.Handled = true; return; } if (View.Id == "TerritorialUsluga_LookupListView") { var criteria = CriteriaOperator.Or( CriteriaOperator.Parse("Contains(Upper(Code),?)", normalizedText), CriteriaOperator.Parse("Contains(Upper(Name), ?)", normalizedText) ); e.Criteria = criteria; e.Handled = true; return; } if (View.Id == "Doctor_LookupListView" || View.Id == "Pacient_LookupListView") { var criteria = CriteriaOperator.Or( CriteriaOperator.Parse("Contains(Upper(FirstName),?)", normalizedText), CriteriaOperator.Parse("Contains(Upper(LastName), ?)", normalizedText), CriteriaOperator.Parse("Contains(Upper(MiddleName), ?)", normalizedText), CriteriaOperator.Parse("Contains(Upper(FullName), ?)", normalizedText) ); e.Criteria = criteria; e.Handled = true; return; } if (filter != null) { var list = new List <CriteriaOperator>(); foreach (var column in filter.View.Model.Columns) { list.Add(CriteriaOperator.Parse(string.Format("Contains(Upper({0}), '{1}')", column.Id.ToString(), normalizedText))); } e.Criteria = CriteriaOperator.Or(list); e.Handled = true; } }
/// <summary> /// Формирование собственного критерия в зависимости от наличия формы и полей полнотектсового поиска в атрибуте LikeSearchPathList, /// а также предустановленного фильтра в модели. Этот метод теперь всегда должен работать (из-за проверок указанных вещей) /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void standardFilterController_CustomBuildCriteria(object sender, CustomBuildCriteriaEventArgs e) { // 2011-12-12. Фиксация понимания алгоитма работы и взаимодействия различных поисков. // Стандартный полнотекстовый // Поиск по полям, определённым в атрибутах LikeSearchPathListAttribute // Поиск по одной из собственных форм поиска // Если LikeSearchPathListAttribute не определён и форма собственного поиска скрыта (т.е. currentFilterId == ""), // то работает чисто стандартный полнотекстовый поиск // Если LikeSearchPathListAttribute определён и форма собственного поиска скрыта (т.е. currentFilterId == ""), // то работает полнотекстовый поиск только по полям, определённым в атрибутах LikeSearchPathListAttribute // Если форма собственного поиска явлена (т.е. currentFilterId != ""), // то поиск производится исключительно по параметрам формы string searchText = e.SearchText; // ((FilterController)(sender)).FullTextFilterAction.Value; if (standardFullTextFilterAction != null) { InitVariablesForLikeSearchPathListAttribute(searchText, out criteriaForLikeSearchPathListAttribute, out propertiesForLikeSearchPathListAttribute); } string res = ""; ListViewClearFilter.Enabled[DO_NOT_ENABLED] = true; // Кнопка очистки фильтра делается видимой FilteringCriterionListAction.Enabled[DO_NOT_ENABLED] = true; // Собственная форма поиска определена и открыта перед пользователем if (currentFilterId != "") { // Учитываем фильтр из формы фильтрации, если она определена if (wp != null && !string.IsNullOrEmpty(wp.CriterionString)) { res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + wp.CriterionString + ")"; } // Добавляем неизбежную нагрузку из модели // Фильтр из ListView в модели: listViewCriteria - присоединяем через AND if (!string.IsNullOrEmpty(listViewCriteria)) { res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + listViewCriteria + ")"; } // Учитываем фильтры из коллекции фильтров в модели if (standardSetFilterAction != null && standardSetFilterAction.SelectedItem != null && standardSetFilterAction.SelectedItem.Data != null) { if (!string.IsNullOrEmpty(standardSetFilterAction.SelectedItem.Data.ToString())) { res = "(" + res + ")" + " AND " + "(" + standardSetFilterAction.SelectedItem.Data.ToString() + ")"; } } criteriaBuilderString = res; e.Criteria = View.ObjectSpace.ParseCriteria(res); // Настраиваем видимости объектов на форме FilteringCriterionListAction.Enabled[DO_NOT_ENABLED] = true; ListViewApplyFilter.Enabled[DO_NOT_ENABLED] = false; ListViewClearFilter.Enabled[DO_NOT_ENABLED] = false; //ListViewApplyFilter.Enabled[DO_NOT_ENABLED] = true; // Скрытие панели с фильтром //FilterPanelHide(); e.Handled = true; return; } /* * // Собственная форма поиска не явлена * * // Анализ атрибута LikeSearchPathListAttribute * res = criteriaForLikeSearchPathListAttribute; * * // Если свой атрибут определён и заполнен, ищем только по полям заданным в атрибуте, которых может быть несколько * if (!string.IsNullOrEmpty(res)) { * * // Список полей, которые сам контроллер поиска обнаруживает: * // Работает, но не нужен в данном случае по соглашению об алгоритме работы контроллера * //foreach (string propName in standardFilterController.GetFullTextSearchProperties()) { * // res += ((res == "") ? "" : " OR ") + "(" + propName + " like '%" + searchText + "%'" + ")"; * //} * * // Добавляем неизбежную нагрузку из модели * * // Фильтр из ListView в модели: listViewCriteria - присоединяем через AND * if (!string.IsNullOrEmpty(listViewCriteria)) { * res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + listViewCriteria + ")"; * } * * // Учитываем фильтры из коллекции фильтров в модели * if (standardSetFilterAction != null && standardSetFilterAction.SelectedItem != null && standardSetFilterAction.SelectedItem.Data != null) { * if (!string.IsNullOrEmpty(standardSetFilterAction.SelectedItem.Data.ToString())) * res = "(" + res + ")" + " AND " + "(" + standardSetFilterAction.SelectedItem.Data.ToString() + ")"; * } * * //// Учитываем фильтр из формы фильтрации, если она определена * //if (wp != null && !string.IsNullOrEmpty(wp.CriterionString)) { * // res = ((res == "") ? "" : "(" + res + ")" + " AND ") + "(" + wp.CriterionString + ")"; * //} * * e.Criteria = CriteriaOperator.Parse(res); * * // Настраиваем видимости объектов на форме * FilteringCriterionListAction.Enabled[DO_NOT_ENABLED] = false; * ListViewApplyFilter.Enabled[DO_NOT_ENABLED] = false; * * ListViewClearFilter.Enabled[DO_NOT_ENABLED] = true; * //ListViewApplyFilter.Enabled[DO_NOT_ENABLED] = true; * * e.Handled = true; * } */ }