Beispiel #1
0
        /// <summary>Создание фильтра для столбца грида DataGridView с указанным условием и настройками.
        /// Определение типа данных, проверка на допустимость условий, приведение условий, формирование описания.
        /// </summary>
        /// <param name="list">грид</param>
        /// <param name="colName">имя столбца</param>
        /// <param name="value">условие</param>
        /// <param name="mode">настройки фильтра (флаги)</param>
        /// <returns>объект фильтра или null если создать не удалось</returns>
        public static Filter Create(DataGridView list, string colName, object value, FilterMode mode)
        {
            if (list == null || !list.Columns.Contains(colName))
            {
                return(null);
            }

            DataGridViewColumn col = list.Columns[colName];
            FilterType         ft  = Filter.GetFilterType(col.ValueType);

            decimal dValue;

            if (!mode.HasFlag(FilterMode.Empty) &&
                ((ft == FilterType.Str && !(value is string[] && ((string[])value).Any(x => !string.IsNullOrWhiteSpace(x)))) ||
                 (ft == FilterType.Date && !(value is Tuple <DateTime, DateTime>)) ||
                 (ft == FilterType.Num &&
                  !(value is Tuple <string, string> &&
                    decimal.TryParse(((Tuple <string, string>)value).Item1, out dValue) &&
                    decimal.TryParse(((Tuple <string, string>)value).Item2, out dValue)))))
            {
                return(null);
            }

            return(new Filter(colName, ft, value, mode));
        }