示例#1
0
        internal static Boolean IsMatch(DateTime date1, DateTime date2, XLDateTimeGrouping dateTimeGrouping)
        {
            Boolean isMatch = true;

            if (isMatch && dateTimeGrouping >= XLDateTimeGrouping.Year)
            {
                isMatch &= date1.Year.Equals(date2.Year);
            }
            if (isMatch && dateTimeGrouping >= XLDateTimeGrouping.Month)
            {
                isMatch &= date1.Month.Equals(date2.Month);
            }
            if (isMatch && dateTimeGrouping >= XLDateTimeGrouping.Day)
            {
                isMatch &= date1.Day.Equals(date2.Day);
            }
            if (isMatch && dateTimeGrouping >= XLDateTimeGrouping.Hour)
            {
                isMatch &= date1.Hour.Equals(date2.Hour);
            }
            if (isMatch && dateTimeGrouping >= XLDateTimeGrouping.Minute)
            {
                isMatch &= date1.Minute.Equals(date2.Minute);
            }
            if (isMatch && dateTimeGrouping >= XLDateTimeGrouping.Second)
            {
                isMatch &= date1.Second.Equals(date2.Second);
            }

            return(isMatch);
        }
示例#2
0
        public IXLDateTimeGroupFilteredColumn AddDateGroupFilter(DateTime date, XLDateTimeGrouping dateTimeGrouping)
        {
            Func <Object, Boolean> condition = date2 => XLDateTimeGroupFilteredColumn.IsMatch(date, (DateTime)date2, dateTimeGrouping);

            _autoFilter.IsEnabled = true;

            if (_autoFilter.Filters.TryGetValue(_column, out List <XLFilter> filterList))
            {
                filterList.Add(
                    new XLFilter
                {
                    Value            = date,
                    Operator         = XLFilterOperator.Equal,
                    Connector        = XLConnector.Or,
                    Condition        = condition,
                    DateTimeGrouping = dateTimeGrouping
                }
                    );
            }
            else
            {
                _autoFilter.Filters.Add(
                    _column,
                    new List <XLFilter>
                {
                    new XLFilter
                    {
                        Value            = date,
                        Operator         = XLFilterOperator.Equal,
                        Connector        = XLConnector.Or,
                        Condition        = condition,
                        DateTimeGrouping = dateTimeGrouping
                    }
                }
                    );
            }

            _autoFilter.Column(_column).FilterType = XLFilterType.DateTimeGrouping;

            var ws = _autoFilter.Range.Worksheet as XLWorksheet;

            ws.SuspendEvents();

            var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount());

            foreach (IXLRangeRow row in rows)
            {
                if (row.Cell(_column).DataType == XLDataType.DateTime && condition(row.Cell(_column).GetDateTime()))
                {
                    row.WorksheetRow().Unhide();
                }
                else
                {
                    row.WorksheetRow().Hide();
                }
            }
            ws.ResumeEvents();

            return(new XLDateTimeGroupFilteredColumn(_autoFilter, _column));
        }
示例#3
0
        public IXLDateTimeGroupFilteredColumn AddDateGroupFilter(DateTime date, XLDateTimeGrouping dateTimeGrouping)
        {
            Func <Object, Boolean> condition = date2 => IsMatch(date, (DateTime)date2, dateTimeGrouping);

            _autoFilter.Filters[_column].Add(new XLFilter
            {
                Value            = date,
                Condition        = condition,
                Operator         = XLFilterOperator.Equal,
                Connector        = XLConnector.Or,
                DateTimeGrouping = dateTimeGrouping
            });

            using (var rows = _autoFilter.Range.Rows(2, _autoFilter.Range.RowCount()))
            {
                foreach (IXLRangeRow row in rows)
                {
                    if (row.Cell(_column).DataType == XLDataType.DateTime && condition(row.Cell(_column).GetDateTime()))
                    {
                        row.WorksheetRow().Unhide().Dispose();
                    }
                }
            }
            return(this);
        }