/// <summary>СОБЫТИЕ Находим данные по строке ввода Фильтра</summary> /// <param name="sender">Текущий объект</param> /// <param name="e">Генерируемая детализация</param> protected override void PART_TextBox_SelectionChanged(object sender, RoutedEventArgs e) { // Наше условие фильтра PRO_TextFilter = (sender as TextBox)?.Text; // Перевод строки фильтра PRO_TextFilterTransliter = PRO_Transliter.MET_Replace(PRO_TextFilter); // Смотрим есть ли спец символы, кторые бы запортили SQL запрос PRO_TextFilter = PRO_TextFilter.Replace("'", "''"); PRI_Timer.Stop(); PRI_Timer.Start(); }
/// <summary>МЕТОД Создание фильтров для уже загруженных данных</summary> protected override void MET_Filter() { if (PRO_TextFilter.Length > 0) { // Разбиваем строку поиска на отдельные слова string[] _mFilter = PRO_TextFilter.Split(' '); // Если есть спец поле, то используем его, иначе выбранный столбик string _PoleSort = PRO_PoleFiltr != "" ? PRO_PoleFiltr : PRO_DataView.Sort; string _And = PRO_Where.Length > 0 ? " and " : ""; try { string _Filtr = $"{PRO_Where}{_And}"; int _Count = 0; // ReSharper disable once LoopCanBeConvertedToQuery foreach (var _f in _mFilter) { _Count++; if (_mFilter.Length > 1 && _Count == _mFilter.Length && _f.Length == 1 && char.IsDigit(_f[0])) { _Filtr += $"(CountLS = {_f[0]}) and "; } else { _Filtr += $"({_PoleSort} like '%{_f}%' or {_PoleSort} like '%{PRO_Transliter.MET_Replace(_f)}%') and "; } } _Filtr += "1 = 1"; PRO_DataView.RowFilter = _Filtr; } catch { try { PRO_DataView.RowFilter = PRO_Where + _And + PRO_DataView.Sort + " >= " + PRO_TextFilter; } catch { try { PRO_DataView.RowFilter = PRO_Where; } catch { PRO_DataView.RowFilter = ""; } } } } else { try { PRO_DataView.RowFilter = PRO_Where; } catch { PRO_DataView.RowFilter = ""; } } // Выделяем первую строку if (PRO_DataView != null && PRO_DataView.Table.Rows.Count != -1) { PART_DataGrid.SelectedIndex = 0; } }