/// <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();
 }
Exemple #2
0
        /// <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;
            }
        }