예제 #1
0
 private IXLFilterConnector ApplyCustomFilter <T>(T value, XLFilterOperator op, Func <Object, Boolean> condition,
                                                  XLFilterType filterType = XLFilterType.Custom)
     where T : IComparable <T>
 {
     _autoFilter.IsEnabled = true;
     if (filterType == XLFilterType.Custom)
     {
         Clear();
         _autoFilter.Filters.Add(_column,
                                 new List <XLFilter>
         {
             new XLFilter
             {
                 Value     = value,
                 Operator  = op,
                 Connector = XLConnector.Or,
                 Condition = condition
             }
         });
     }
     else
     {
         if (_autoFilter.Filters.TryGetValue(_column, out List <XLFilter> filterList))
         {
             filterList.Add(new XLFilter
             {
                 Value     = value,
                 Operator  = op,
                 Connector = XLConnector.Or,
                 Condition = condition
             });
         }
         else
         {
             _autoFilter.Filters.Add(_column,
                                     new List <XLFilter>
             {
                 new XLFilter
                 {
                     Value     = value,
                     Operator  = op,
                     Connector = XLConnector.Or,
                     Condition = condition
                 }
             });
         }
     }
     _autoFilter.Column(_column).FilterType = filterType;
     _autoFilter.Reapply();
     return(new XLFilterConnector(_autoFilter, _column));
 }
예제 #2
0
 public IXLFilterColumn SetFilterType(XLFilterType value)
 {
     FilterType = value; return(this);
 }
예제 #3
0
        private IXLFilterConnector ApplyCustomFilter <T>(T value, XLFilterOperator op, Func <Object, Boolean> condition,
                                                         XLFilterType filterType = XLFilterType.Custom)
            where T : IComparable <T>
        {
            _autoFilter.Enabled = true;
            if (filterType == XLFilterType.Custom)
            {
                Clear();
                _autoFilter.Filters.Add(_column,
                                        new List <XLFilter>
                {
                    new XLFilter
                    {
                        Value     = value,
                        Operator  = op,
                        Connector = XLConnector.Or,
                        Condition = condition
                    }
                });
            }
            else
            {
                List <XLFilter> filterList;
                if (_autoFilter.Filters.TryGetValue(_column, out filterList))
                {
                    filterList.Add(new XLFilter
                    {
                        Value = value, Operator = op, Connector = XLConnector.Or, Condition = condition
                    });
                }
                else
                {
                    _autoFilter.Filters.Add(_column,
                                            new List <XLFilter>
                    {
                        new XLFilter
                        {
                            Value     = value,
                            Operator  = op,
                            Connector = XLConnector.Or,
                            Condition = condition
                        }
                    });
                }
            }
            _autoFilter.Column(_column).FilterType = filterType;
            Boolean isText = typeof(T) == typeof(String);
            var     ws     = _autoFilter.Range.Worksheet as XLWorksheet;

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

            foreach (IXLRangeRow row in rows)
            {
                Boolean match = isText
                                    ? condition(row.Cell(_column).GetString())
                                    : row.Cell(_column).DataType == XLCellValues.Number &&
                                condition(row.Cell(_column).GetDouble());
                if (match)
                {
                    row.WorksheetRow().Unhide();
                }
                else
                {
                    row.WorksheetRow().Hide();
                }
            }
            ws.ResumeEvents();
            return(new XLFilterConnector(_autoFilter, _column));
        }